2017-01-09 98 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

这仍然是写同一个文件,谢谢你的尝试! –