2009-01-15 64 views
1

是的我想讀取一個簡單的日誌文件到TStringList中,並且使用LoadFromFile很容易完成。但問題是該文件可能已被另一個程序同時打開,因此可能會出現異常。我試圖使用:想要將文件讀取到TStringList

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

什麼建議嗎?

回答

12

嘗試LoadFromStream和做類似:

fileStream := TFileStream.Create(aFileName, fmShareDenyNone); 
myTStringList.LoadFromStream(fileStream); 
fileStream.Free(); 
+0

不要直接在應用程序中調用Destroy。相反,調用Free來檢查TFileStream引用是否爲零,然後才調用Destroy。 – inzKulozik 2009-01-16 18:43:09

+0

你應該是自由而不是毀滅...... – Drejc 2009-01-19 10:03:15

1

此外,try..except和try..finally是在這些時候要好的朋友。在這些類型的塊中封裝您的文件閱讀代碼,並告訴用戶出現的問題。

4

fmShareCompat應該被標記爲已棄用。你想fmShareDenyNoneas Drejc said

fmShareCompat來自16個DOS天我相信。在Windows上,它被視爲與fmShareExclusive相同。當Linux被支持時,它被視爲與fmShareDenyNone相同。