Как прочитать файл, который используется другим процессом? - PullRequest
3 голосов
/ 13 апреля 2011

У меня есть приложение, в котором есть система журналов, которая создает файл и сохраняет его с помощью TFileStream, который создается следующим образом: FFileStream: = TFileStream.Create (FFilename, fmOpenWrite);

Ok. Когда я пытаюсь открыть этот файл с помощью блокнота, нет проблем, с блокнотом ++ нет проблем. Когда я пытаюсь загрузить файл с другим приложением, которое я создал, возникает ошибка, которая говорит о том, что файл используется другим процессом. Я пытался TStringList, LoadFromFile и TFileStream.Create (LFile, fmOpenRea);.

Кто-то знает, как я могу читать это как блокнот и блокнот ++?

Tks.

Ответы [ 3 ]

7 голосов
/ 13 апреля 2011

Эрик пришел первым, но использует fmShareDenyNone, который позволит другим процессам записывать в тот же файл. Если вы хотите разрешить чтение другим процессам, используйте:

FFileStream := TFileStream.Create(FFilename, fmOpenWrite or fmShareDenyWrite);
4 голосов
/ 13 апреля 2011

Используйте fmOpenWrite or fmShareDenyNone для включения общего доступа.

1 голос
/ 13 мая 2013

Я использую Delphi7 , и у меня возникало ощущение, что TFileStream иногда не удается открыть файл для чтения, пока он заблокирован только для записи.(Прежде, чем кто-то начал ворчать о параметрах совместного использования класса TFileStream ; я знаю о них и правильно их установил.) Хотя я еще не смог выяснить причины такого явно ошибочного поведения, яобнаружил, что это можно обойти, используя некоторые другие средства обработки файлов:

Хотя файл не может быть открыт с TFileStream - даже с правильными настройками общего доступа (да, я знаю, чтоЯ делаю) - его можно легко открыть с помощью соответствующих вызовов WinAPI: CreateFile / ReadFile / SetFilePointer / CloseHandle, обернутый в Windows .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...