Delphi - 共享违规打开文本文件

Sim*_*mes 6 delphi delphi-7 text-files

我正在尝试打开一个文本文件,以便在Delphi 7应用程序中读取,但是由于另一个应用程序已经打开了文件,因此会出现I/O错误32(共享冲突).我已经尝试将FileMode设置为"fmOpenRead或fmShareDenyNone",但现在意识到这不适用于文本文件.

有没有办法读取其他应用程序打开的文本文件?

var
  f: TextFile;
begin
  FileMode := fmOpenRead or fmShareDenyNone;   // FileMode IS NOT APPLICABLE TO TEXT FILES!!
  AssignFile(f, FileName);
  Reset(f);
Run Code Online (Sandbox Code Playgroud)

Ian*_*oyd 12

使用LoadFromStreamTStringList 的方法,而不是LoadFromFile.你可以通过这种方式控制锁定:

var
    slFile: TStrings;
    stream: TStream;
begin
   slFile := TStringList.Create;
   try
      stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
      try 
         slFile.LoadFromStream(stream);
      finally
         stream.Free;
      end;

      //Use the stringlist
   finally
      slFile.Free;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

该示例使用流加载到TStringList.如果你只想阅读作品,你可以这样做.只需从流中读取即可.


Pet*_*háč 1

这将立即解决您的问题。使用 TStringList 加载文件。只需致电:

...
var sl: TStringList;
begin
  sl := TStringList.create();
  try
    sl.loadFromFile(Filename);
    ...do your stuff here...
  finally
    freeAndNil(sl);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我发现处理文本文件,最好使用TStringList。否则我会选择 TFileStream,你可以在那里指定你的打开模式。

  • @MasterPeter,我相信 mghie 正在谈论的罪魁祸首是 fmShareDenyWrite.fmShareDenyWrite“锁定”一个文件,以便其他进程只能读取......尽管因此而否决你的答案有点严厉。 (3认同)