2014-12-03 26 views
0

我在這裏有一種情況。我想根據他們上次修改時間的創建來讀取文件。最初,我使用FileSystemWatcher,以便在新文件即將發佈時得到通知,但後來我意識到,如果我的軟件運行的系統出現故障或重新啓動文件被丟棄的位置仍然會繼續。根據C#中修改時間讀取文件#

爲了方便理解,我舉一個例子:

系統A - 文件服務器(文件創建一個目錄每2分鐘在該服務器上) 系統B - 我的軟件將運行並監控文件來自系統A的路徑

如果系統B重新啓動並在10分鐘後再次啓動,FileSystemWatcher將跳過在這10分鐘內生成的所有這些文件。

如何確保在這10分鐘內生成的文件也能被捕獲?

讓我知道我的問題是否仍然無法理解。

+0

我想有沒有辦法,一種方法是在系統重新啓動時再次讀取文件... – 2014-12-03 06:42:38

回答

0

如果你不想將它分成兩個系統,你必須堅持一點信息。 每次在文件系統觀察器上觸發新事件時,您都可以將當前時間戳存儲在文件中。每次啓動服務時,都可以從文件系統中讀取比上次時間戳更新的所有文件。這樣你不應該錯過一個文件。

+0

這正是我也在想的。但是,您可以請示例代碼幫忙嗎? – gauravmajithia 2014-12-03 07:16:14

0

我將這個應用程序分成兩部分,運行一個filesystemwatcher-wcf服務,緩衝在這10分鐘內創建的文件,並在重新啓動時將它發送到系統B.我看不到其他的方式,對不起。

0

複製從源計算機的整個文件和粘貼到基於狀態的目的地..

串dirPath = @「C:\ A」; string DestinPath = @「C:\ B」;

 if (Directory.Exists(dirPath) && Directory.Exists(DestinPath)) 
     { 
      DirectoryInfo di = new DirectoryInfo(dirPath); 

      foreach (var file in di.GetFiles()) 
      { 
       string destinFile = DestinPath + "\\" + file.Name; 
       if (File.Exists(destinFile)) 
       { 
        continue; 
       } 
       else 
        file.CopyTo(destinFile); 
      } 

     } 
0

我認爲FileSystemWatcher必須將有關文件系統的信息寫入DB(或其他類型的存儲)。當系統B啓動時,觀察者將當前文件系統與此信息進行比較,並引發有關更改的事件。

+0

這正是我也在想的。但是,您可以請示例代碼幫忙嗎? – gauravmajithia 2014-12-03 07:16:51

0

不知道如果我理解正確你的問題,但根據我所得到的,並假設這兩個系統是同步在時間方面,例如,如果你想獲得已修改內十分鐘前的文件:

 DateTime tenMinutesAgo = DateTime.Now.AddMinutes(-10); 
     string[] systemAFiles = System.IO.Directory.GetFiles(systemAPath); 
     foreach (string files in systemAFiles) 
     { 
      DateTime lastWriteTime = System.IO.File.GetLastWriteTime(files); 
      if (lastWriteTime > tenMinutesAgo) //produced after ten minutes ago 
      { 
       //read file 
      } 
     } 

我知道這些文件是「生成的」,因此它們已被創建或修改。如果他們只是從一個文件夾移動到另一個文件夾,這將無法正常工作。在這種情況下,最好的方法是在該列表中寫入文件的快照(並將其寫入某種保存文件),並在再次運行時對其進行比較。

+0

是的。可能會有些類似於此。 除了@Marc和Vitone的想法,我可以實現這個代碼..讓我試着回到你身邊。 – gauravmajithia 2014-12-03 07:24:46

相關問題