При работе с текстовыми файлами в Delphi 7 может возникнуть проблема, связанная с ошибкой ввода-вывода 32, известной как "violation sharing" (нарушение доступа к общему ресурсу). Это происходит, когда другой процесс уже открыл файл и удерживает его. В стандартном подходе с использованием TextFile установить режим доступа, аналогичный fmShareDenyNone, невозможно, так как этот режим не применяется к текстовым файлам.
Альтернативные подходы
Для решения данной проблемы можно использовать следующие подходы:
Использование TStreamReader с TFileStream
TStreamReader позволяет читать файлы по строкам, что может быть удобно для обработки больших файлов. Сначала необходимо открыть файл с помощью TFileStream, указав нужный режим доступа, после чего можно передать поток TStreamReader для чтения.
pascal
var
stream: TFileStream;
reader: TStreamReader;
begin
stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
try
reader := TStreamReader.Create(stream);
try
// Чтение файла по строкам
while not reader.EndOfStream do
Writeln(reader.ReadLine);
finally
reader.Free;
end;
finally
stream.Free;
end;
end;
Использование TStringList
TStringList - удобный инструмент для работы с текстовыми файлами. Метод LoadFromStream позволяет загрузить файл в TStringList, предварительно открыв его с помощью TFileStream в нужном режиме доступа.
pascal
var
sl: TStringList;
stream: TFileStream;
begin
sl := TStringList.Create;
try
stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
try
sl.LoadFromStream(stream);
// Обработка строк файла
for var i := 0 to sl.Count - 1 do
Writeln(sl[i]);
finally
stream.Free;
end;
finally
sl.Free;
end;
end;
Подтвержденный ответ
Использование TFileStream с TStreamReader или LoadFromStream из TStringList позволяет успешно прочитать текстовый файл, даже если он уже открыт другим приложением.
Важные замечания
При использовании TStringList весь файл загружается в память, что может быть нежелательно для очень больших файлов.
Необходимо обратить внимание на режим доступа к файлу, который может быть ограничен, если другой процесс открыл файл с правами fmOpenWrite.
Используя предложенные методы, можно решить проблему чтения текстовых файлов, открытых другими приложениями, в среде разработки Delphi 7.
Проблема чтения текстовых файлов в Delphi 7, открытых другим приложением, решается с помощью `TStreamReader` или `TStringList` при открытии файла с необходимым режимом доступа.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.