如何读取另一个进程正在使用的文件?

时间:2011-04-13 17:06:20

标签: delphi winapi

我有一个应用程序,它有一个创建文件的日志系统,并使用这种方式创建的TFileStream处理它: FFileStream:= TFileStream.Create(FFilename,fmOpenWrite);

确定。当我尝试用记事本打开这个文件时没问题,用notepad ++没问题。当我尝试使用我创建的其他应用程序加载文件时,它会引发一个错误,指出该文件已被其他进程使用。 我尝试了TStringList,LoadFromFile和TFileStream.Create(LFile,fmOpenRea);。

有人知道我怎么能像记事本和记事本那样阅读这个?

韩国社交协会

3 个答案:

答案 0 :(得分:7)

Erik首先到达那里,但使用fmShareDenyNone,这将允许其他进程写入同一个文件。如果您只想允许其他进程阅读,请使用:

FFileStream := TFileStream.Create(FFilename, fmOpenWrite or fmShareDenyWrite);

答案 1 :(得分:4)

使用fmOpenWrite or fmShareDenyNone启用分享。

答案 2 :(得分:1)

我正在使用 Delphi7 并且我遇到了, TFileStream 有时无法打开文件进行阅读,而只是为了写入而被锁定。 (在开始讨论 TFileStream 类的共享参数之前;我知道它们并将它们设置正确。)虽然我还没有找到这种明显错误行为的原因,我发现它可以通过使用其他一些文件处理方法来解决:

虽然无法使用 TFileStream 打开文件 - 即使使用正确的共享设置(是的,我知道我在做什么) - 可以使用适当的WinAPI调用轻松打开它:{{ 3}} / ReadFile / SetFilePointer / CloseHandle包含在 Windows 单元中。