我有一個C#實用程序需要執行一些操作,只要特定文件被另一個進程釋放,即該進程停止寫入文件。我使用下面的代碼,但它在Windows 7系統上表現不一致。C#,Windows 7:如何可靠地檢查進程是否仍在寫入文件?
private static bool FileWritten(string filename)
{
try
{
using (FileStream inputStream = File.Open(filename, FileMode.Open,
FileAccess.Read,
FileShare.None))
{
return true;
}
}
catch (IOException e)
{
return false;
}
}
有時即使看起來文件已被釋放,它也會返回false。我在while(true)循環中調用FileWritten(),只要它返回false,就會一直檢查調用FileWritten(),然後在一些最大時間後退出。調試這很困難,因爲它似乎在調試器下正常工作(即,只要文件實際發佈,它就會返回true),但直接啓動我的代碼時不起作用。此外,即使添加調試打印似乎也會影響其行爲。
是否有更可靠的方法來檢查文件是否已寫入併發布,這將運行Win 7,並且最好在Win XP上運行?
類似於http://stackoverflow.com/questions/860656/how-does-one-figure-out-what-process-locked-a-file-using-c和http://stackoverflow.com/questions/317071 /如何找出哪個進程正在鎖定文件使用網 – hatchet 2012-03-06 16:49:56
誰會調用訪問文件的初始進程? – 2012-03-06 16:56:43