2017-01-09 97 views
-2

因此,我一直在編寫一個程序來幫助我監視一些工作中的事情,我讓他們寫入.txt文件,但是當我監視的目錄中存在文件時,它會保留將文件寫入此txt文件,例如在列表視圖中的C#重複

New Text Document.txt - POA Submitted Directory - Current Time: 11:40:15 AM 1/9/2017 | Time Received: 1/9/2017 11:21:16 AM 
New Text Document.txt - POA Directory - Current Time: 11:40:25 AM 1/9/2017 | Time Received: 1/9/2017 11:21:16 AM 
New Text Document.txt - MTM Directory - Current Time: 12:48:28 PM 1/9/2017 | Time Received: 1/9/2017 11:21:16 AM 
New Text Document.txt - MTM Directory - Current Time: 12:49:08 PM 1/9/2017 | Time Received: 1/9/2017 11:21:16 AM 
New Text Document.txt - MTM Directory - Current Time: 12:49:18 PM 1/9/2017 | Time Received: 1/9/2017 11:21:16 AM 

我應該如何避免重複?

這裏是我獲得上市

private void POACheck(object sender, EventArgs e) 
{ 
    listView2.Items.Clear(); 
    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("Z:/FTPRoot/PDCUpload/POA"); 
    foreach (System.IO.FileInfo f in dir.GetFiles("*.*")) 
    { 
     FlashWindow(this.Handle, true); 
     ListViewItem lSingleItem = listView2.Items.Add(f.Name); 
     using (System.IO.StreamWriter file = 
     new System.IO.StreamWriter(@"C:\Users\sisson.chad\Desktop\POA-MTM.txt", true)) 
     { 
      file.WriteLine(f.Name + " - POA Directory - Current Time: " + DateTime.Now.ToString("h:mm:ss tt") + " " + DateTime.Now.ToString("M/d/yyy") + " | Time Received: " + f.LastWriteTime); 
     } 

    } 
} 

都有助於目錄方法表示讚賞,對不起,我是新來的C#和我學習還是。

+0

Opps,對不起,我的標籤現在好嗎? –

+0

一種方法是維護一個列表,列出哪些元素已經被寫入並且只寫入新的元素。請閱讀[問]並參加[遊覽] – Plutonix

+0

StreamWriter參數'true'正在追加,而不是創建新文件。 – jdweng

回答

0

因此@Plutonix已經給你一個解決方案。

將您以前使用腳本訪問過的每個文件的獨特屬性存儲在列表中(FileInfo.FullName爲您提供了絕對路徑,該功能應該可以正常工作)。在迭代目錄中的文件時,檢查該文件是否在該列表中。如果找到了,那麼只需continue;。否則,做你以前做過的事情(如果那樣的話)。

如果應用程序重新啓動,以前維護的列表的內容將消失,所以我建議將獨特的屬性存儲在日誌中,以便在應用程序初始化後可以將其重新讀取。

編輯:由於POACheck是一個私有方法,我猜在這個類的某個地方也有一個MTMCheck,所以將這個列表設爲一個私有字段,以便它們都可以讀取。

+0

我如何存儲它?對不起,我很喜歡c# –

+0

你應該創建一個像@ user1895086之前顯示給你的列表,唯一的區別是它會是字段:'List visitedFilePaths = new List ()'。然後,您只需使用其「Add」方法將路徑添加到visitedFilePaths列表。您可以檢查列表是否包含帶有「Contains」方法的字符串。 實施例: 如果(visitedFilePaths.Contains(f.FullName)) { 繼續; } – devilirium

+0

這一切都開始看起來像意大利麪代碼給我,我不認爲我正確實施它。 –

0

歡迎來到C#。而且,還有,到List<T>

 private void POACheck(object sender, EventArgs e) 
     { 
      listView2.Items.Clear(); 
      System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("Z:/FTPRoot/PDCUpload/POA");    
      var Names = new List<string>(); 
      foreach (System.IO.FileInfo f in dir.GetFiles("*.*")) 
      { 
       if(Names.IndexOf(f.Name) == -1) //-1 result from IndexOf means it's not there. 
       { 
        FlashWindow(this.Handle, true); 
        ListViewItem lSingleItem = listView2.Items.Add(f.Name); 
        using (System.IO.StreamWriter file = 
        new System.IO.StreamWriter(@"C:\Users\sisson.chad\Desktop\POA-MTM.txt", true)) 
        { 

         file.WriteLine(f.Name + " - POA Directory - Current Time: " + DateTime.Now.ToString("h:mm:ss tt") + " " + DateTime.Now.ToString("M/d/yyy") + " | Time Received: " + f.LastWriteTime); 
         Names.Add(f.Name); 
        } 
       } 

      } 
     } 
+0

New Text Document.txt - POA目錄 - 當前時間:下午2:12:08 1/9/2017 |收到的時間:1/9/2017 11:21:16 AM 新文本Document.txt - POA目錄 - 當前時間:下午2:12:18 |收到的時間:1/9/2017 11:21:16 AM 新文本Document.txt - POA目錄 - 當前時間:下午2:12:28 |收到的時間:1/9/2017 11:21:16 AM –

+0

這仍然是寫同一個文件,謝謝你的嘗試! –