2017-04-04 38 views
0
private void btn_Backup_Click(object sender, EventArgs e) 
    { 
     List<DirectoryInfo> SourceDir = this.lbox_Sources.Items.Cast<DirectoryInfo>().ToList(); 
     List<DirectoryInfo> TargetDir = this.lbox_Targets.Items.Cast<DirectoryInfo>().ToList(); 

     foreach (DirectoryInfo sourcedir in SourceDir) 
     { 
      foreach (DirectoryInfo targetdir in TargetDir) 
      { 
       string dateString = DateTime.Now.ToString("MM-dd-yyyy_H.mm.ss"); 
       string LogFileName = @"BackupLog_" + sourcedir.Name + @"_" + dateString + @".log"; 
       string[] lines = { dateString + "\t" + sourcedir.FullName + "\t" + targetdir.FullName + "\t" + "COMPLETED" }; 

       if (this.checkbox_zipfiles.Checked == true) 
       { 
        System.IO.Compression.ZipFile.CreateFromDirectory(sourcedir.FullName, targetdir.FullName + @"\BACKUP_" + sourcedir.Name + @"_" + dateString + @".zip"); 
        System.IO.File.WriteAllLines(tbox_LogFiles.Text + @"\" + LogFileName, lines); 
       } 
       else 
       { 
        foreach (var file in sourcedir.GetFiles()) 
        { 
         Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(sourcedir.FullName, targetdir.FullName, true); 
         System.IO.File.WriteAllLines(tbox_LogFiles.Text + @"\" + LogFileName, lines); 
        } 
       } 
      } 
     } 
    } 

我需要從備份(比如後綴名爲.txt的.docx) 我用我的窗體上的列表中添加這些例外排除某些文件。 我還需要排除某些文件和文件夾,但我想我可以做到這一點,如果我知道如何做到這一點。排除文本文件等從備份應用程序C#

private void btn_AddFileTypeException_Click(object sender, EventArgs e) 
    { 
     Form_FileTypeExceptions frm = new Form_FileTypeExceptions(new FileException()); 

     if (frm.ShowDialog() == DialogResult.OK) 
     { 
      this.lbox_FileTypeExceptions.Items.Add(frm.Exception); 
     } 
    } 

有什麼想法嗎?

+0

什麼是你FileException類的結構:在此之前,

如果你(只是爲了測試)中獲取文件的權數,通過觀察有兩個列表中提到循環,測試? (順便說一句,一個錯誤的名字 - 我猜 - 文件擴展名) – Nino

+0

用你選擇的複製技術,你沒有單獨查看每個文件。我認爲你需要這樣做。 –

+0

當你調用sourcedir.GetFiles()...你可以傳入你想要的文件擴展名作爲參數。 – Wheels73

回答

0

從表單,你設置擴展排除將包含擴展跳過字符串填充列表中,這樣的事情:在你的內循環

List<string> extensionsToSkip = new List<string>(); 
extensionsToSkip.Add(".txt"); 
extensionsToSkip.Add(".docx"); 
//etc... 

,改變從

foreach (var file in sourcedir.GetFiles()) 
foreach

這個

foreach (var file in sourcedir.GetFiles() 
    .Where(f => !extensionsToSkip.Contains(f.Extension)).ToList()) 

,你可以看到,當你使用GetFiles獲取文件集合,它將被過濾以排除在extensionsToSkip列表中指定的擴展名。

var originalList = sourcedir.GetFiles(); 
var filteredList = sourcedir.GetFiles().Where(f => !extensionsToSkip.Contains(f.Extension)).ToList(); 
相關問題