我有一個Delphi5應用程序將文件(.pdf)和一個非常小的元數據文件導出到網絡位置。目的是通過輪詢的.NET應用程序處理這兩個文件,然後將其刪除。什麼可能會導致意外'使用中的文件'錯誤
我的做法是
- 寫擴展名爲 '第二部分'
- 元數據文件生成.PDF
- 重命名。部分文件中的.dat
的.NET進程正在尋找擴展名爲「.dat」的文件,因此我預計這兩個閱讀器/編寫者之間沒有衝突。但是,.NET過程中偶爾會記錄以下錯誤......
System.IO.IOException: The process cannot access the file '\\server\Path\FileName.dat' because it is being used by another process.
(我說的時候 - 我們正在測試,所以,當交易量上升,這可能變得更加的一個問題)
的Delphi代碼看起來是這樣的:
AssignFile(FTextFile, Format('%s\%s.part', [DMSPath, FullFileName]));
try
try
ReWrite(FTextFile);
Writeln(FTextFile, MetaDataString);
finally
CloseFile(FTextFile);
end;
except
raise ELogFileException.Create(LOGFILEWRITEFAILURE);
end;
然後是執行的代碼如下的單獨的方法
if FindFirst(Format('%s\*.part',[DMSPath]), faAnyFile, SearchRec) = 0 then begin
repeat
OldName := Format('%s\%s',[DMSPath, SearchRec.Name]);
NewName := Format('%s\%s',[DMSPath, ChangeFileExt(SearchRec.Name, '.dat')]);
RenameFile(OldName, NewName);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
我什麼都看不到內在的錯誤的代碼,我們有一對夫婦心中的補救措施,但我有2個問題
- 我應該嘗試不同的技術來更可靠地保護「.DAT」文件直到完全準備好
- 什麼情況可能導致這種情況?
到目前爲止已有一個建議的原因 - 殺毒軟件。
有關如何以不同方式生成文件的任何建議?請注意,我的應用程序是Delphi5;我想知道是否有更新的,更'原子'版本的'MoveFileA'WinApi呼叫我可以使用。
這是你的AV軟件的常見原因 – 2014-09-22 15:39:23
謝謝,@David - 我沒有想到這個 – 2014-09-22 15:41:18
Windows搜索用於導致這個問題,雖然我避風港最近沒有看到它,所以現在可能已經修復了。如果這是您可以通過爲您創建的文件設置「不索引」屬性來解決此問題的原因。 – arx 2014-09-22 15:45:39