可能重複:
C# - from time to time check if a file exists and read from it正在拷貝文件嗎?
我使用的文件的專家以檢查文件是否在目錄craeted。如果是,那麼我想打開它並移到另一個目錄。
我的方法也是使用FileShare.None
來確保獨佔訪問。我所做的是:
class Program
{
private static void Main(string[] args)
{
FileSystemWatcher fileWatcher = new FileSystemWatcher();
fileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
fileWatcher.Created += fileWatcher_Created;
fileWatcher.EnableRaisingEvents = true;
Console.ReadLine();
}
private static void fileWatcher_Created(object sender, FileSystemEventArgs e)
{
WorkOnFile(e.FullPath);
}
//must be done completely. How do I ensure it?
private static void WorkOnFile(string fileName)
{
using (FileStream f = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
Thread.Sleep(40000); // some long operations
}
}
}
底線是,要完全做到WorkOnFile()
且只有一個一個文件的時候了。如果一個文件被複制,那麼我需要再次撥打WorkOnFile()
,直到它完全被複制,並且沒有進程正在使用它。
我該如何達到目標?
我認爲[這個SO後(http://stackoverflow.com/questions/12582874/filesystemwatcher-and-write-completion/ 12584075#12584075)試圖達到或多或少相同的目的。否則,你能否更詳細地解釋你的問題是什麼:必須知道創建的文件何時完成寫入以便複製它或其他內容? – mbarthelemy
創建隊列,將「文件複製操作」添加到隊列並擁有消費者線程。如果文件複製失敗,請將複製請求重新排隊到隊列中。 – Patrick
是的,正好 - 必須知道創建的文件何時寫完 –