2013-04-20 105 views
2

我正在編寫一個應用程序來刪除超過6個月的測試文件夾中的文件,應用程序正常工作,因爲我測試了它,我想創建一個日誌文件以跟蹤用於審計目的的已刪除文件的名稱。單擊按鈕時記錄刪除的文件?記錄所有文件(刪除和未刪除)

但是下面的scirpt確實記錄了所有文件(刪除和未刪除),我需要的只是記錄日期和時間以及刪除文件的名稱。

謝謝

下面的腳本:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 

namespace Delete_PDF_Files 
{ 
    public partial class Form1 : Form 
    { 
     private string strLogText; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnCheck_Click(object sender, EventArgs e) 
     { 
      // check the number of file in the CPS directory on S drive 
      listBox1.Items.Clear(); 

      string[] files = System.IO.Directory.GetFiles(@"C:\test\"); // @"S:\CPS Papers\" 
      this.listBox1.Items.AddRange(files); 
      textBox1.Text = listBox1.Items.Count.ToString(); 
     } 

     // delete button to delete files over 6 months from CPS folder 
     private void btnDelete_Click(object sender, EventArgs e) 
     { 
      string[] files = System.IO.Directory.GetFiles(@"C:\test\"); //S:\CPS Papers test C:\test\ 

      foreach (string file in files) 
      { 
       System.IO.FileInfo fi = new System.IO.FileInfo(file); 

       if (fi.LastWriteTime < DateTime.Now.AddMonths(-6)) 
        fi.Delete(); 

       // Create a writer and open the file: //C:\test\log 
       System.IO.StreamWriter log; 

       if (!System.IO.File.Exists("C:\\test\\log\\logfile.txt")) 
       { 
        log = new System.IO.StreamWriter("C:\\test\\log\\logfile.txt"); 
       } 
       else 
       { 
        log = File.AppendText("C:\\test\\log\\logfile.txt"); 
       } 

       // Write to the file: 
       log.WriteLine(DateTime.Now); 
       log.WriteLine(strLogText); 
       log.WriteLine(); 
       log.WriteLine(); 

       // Close the stream: 
       log.Close(); 

      } 
     } 

     // Exit button 
     private void btnExit_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); 
     } 
    } 
} 
+0

或者你可以只使用PowerShell單行.... – 2013-04-20 09:25:19

回答

0

替換刪除代碼這一個:

private void btnDelete_Click(object sender, EventArgs e) 
    { 
     string[] files = System.IO.Directory.GetFiles(@"C:\test\"); //S:\CPS Papers test C:\test\ 

     foreach (string file in files) 
     { 
      System.IO.FileInfo fi = new System.IO.FileInfo(file); 
      //if (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) 
      if (fi.LastWriteTime < DateTime.Now.AddMonths(-6)) 
      { 
       fi.Delete(); 
       using (StreamWriter writer = File.AppendText("C:\\test\\log\\logfile.txt")) 
       { 
        writer.Write("File: " + file + " deleted at : "+DateTime.Now); 
        writer.WriteLine("----------------------------------------------------"); 
        writer.Flush(); 
        writer.Close(); 

       } 
      } 

     } 
    } 
+0

您好,感謝您的快速回復,我剛纔試了一下它的輝煌記錄,它仍然顯示未被刪除的文件,因爲它們不到6個月,並將它們顯示爲已刪除文件:C:\ test \ Plumbing Covering Letter.docx刪除:20/04/2013 10:35:37文件:C: \ test \ algeràune certaineépoque.docxdeleted at:20/04/2013 10:35:37 --------------------------- ------------------------- File:C:\ test \ cover letter.docx deleted at:20/04/2013 10:35:37 --- – user2038015 2013-04-20 09:39:37

+0

這似乎是不可能的,因爲代碼在你的條件內'fi.LastWriteTime 2013-04-20 10:25:23

0

而不是使用自定義日誌記錄的,你在做我會建議你使用一個好的圖書館,如Log4Net。爲什麼重新發明輪子?我知道它的學習曲線時間很短,但一旦你瞭解了你,你可以很容易地將它整合到任何新的項目中。

只需在你的app.config中添加一個配置部分,並給出here和幾行代碼,就可以開始了。

上log4net的一個很好的教程,可以發現here

+0

謝謝,稍後再檢查一下,我在網上看到了很少的Log4Net的推薦。 – user2038015 2013-04-20 09:46:21

+0

太棒了!我一直在爲此工作六個月,但仍希望我早些時候開始使用它。 – 2013-04-20 09:49:52