2

是的,我想将一个简单的日志文件读入 TStringList,这很容易通过 LoadFromFile 完成。但问题是该文件可能已经被另一个程序同时打开,因此可能会出现异常。我曾尝试使用:

FileMode := fmShareCompat;

但它不会起作用。

我也尝试过使用:

fFilePath := fPathList[PathIndex] + '\' + FileData.Name;
AssignFile(vFile, fFilePath);
Reset(vFile, 1);  // Recordsize = 1

SetLength(vFileString, FileData.Size);
BlockRead(vFile, vFileString, FileData.Size);   
vCurrentFile.Text := vFileString;

它会引发一个 EInOutError,并带有消息 I/O 错误 998。

有什么建议吗?

4

3 回答 3

13

尝试LoadFromStream并执行以下操作:

fileStream := TFileStream.Create(aFileName, fmShareDenyNone);
myTStringList.LoadFromStream(fileStream);
fileStream.Free();
于 2009-01-15T06:54:02.293 回答
4

fmShareCompat 可能应该被标记为已弃用。你想要fmShareDenyNone正如 Drejc 所说

我相信 fmShareCompat 来自 16 个 DOS 天。在 Windows 上,它的处理方式与 fmShareExclusive 相同。当支持 Linux 时,它被视为与 fmShareDenyNone 相同。

于 2009-01-15T09:50:40.453 回答
1

此外,try..except 和 try..finally 在这些时候是好朋友。将您的文件读取代码封装在这些类型的块中,并告诉用户出现的问题。

于 2009-01-15T07:05:25.233 回答