2011-12-27 52 views
1

我試圖寫一個小程序服務,將檢測何時項目(S)已被添加到一個同步的投遞箱文件夾,然後等待(允許完全同步)和移動項目( s)放入日期戳記暫存文件夾中作進一步處理。夠簡單了...文件看守類具有投遞箱

這裏是我的代碼:

static void Main(string[] args) 
    { 
     var watcher = new FileSystemWatcher(); 

     string _path = @"E:\IMPORT\Dropbox\"; 
     watcher.Path = _path; 
     watcher.EnableRaisingEvents = true; 
     watcher.Created += new FileSystemEventHandler(watcher_Created); 


     Console 
     .WriteLine("FileSystemWatcher ready and listening to changes in :\n\n" 
        + _path); 

     watcher.Path = _path; 
     Console.ReadLine(); 
    } 

    static void watcher_Created(object sender, FileSystemEventArgs e) 
    { 
     Thread.Sleep(3000); 
     Console.WriteLine(e.Name + " file has been created."); 

     string filename = Path.GetFileName(e.FullPath); 
     string path = @"E:\IMPORT\Staging\" 
         + DateTime.Now.ToFileTime().ToString() 
         + @"\"; 

     try 
     { 
      Directory.CreateDirectory(path); 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine("Error: " + ex.ToString()); 
     } 
     try 
     { 
      File.Move(e.FullPath, path + filename); 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine("Error: " + ex.ToString()); 
     } 
    } 

此代碼將正常工作,如果被添加到目錄同步一個項目,但多個項目將被添加,並需要有一個延遲要將項目添加到保管箱。有關我如何完成此任何想法?

+0

爲什麼延遲?所以沒有臨時文件夾被重用? – 2011-12-27 20:18:50

+1

@Austin,所以如果傳輸了20MB的.pdf,它有時間在下拉框目錄中完全同步 – 2011-12-27 20:27:31

回答

4

我認爲,在這裏你最好的選擇是去除FileSystemWatcher對象,並帶有目錄你自己定期監測(例如,在一個BackgroundWorker線程循環或定時器觸發事件​​)替換它。

在本設計中,可以延遲文件的處理,只要你需要在文件上的時間戳與當前時間進行比較,只有在處理文件時,你認爲有足夠的時間已經過去了。

這種設計也將支持已經存在於目錄中的文件重新啓動應用程序,它的FileSystemWatcher的方法很可能不會。