从备份应用程序C#中排除文本文件等

时间:2017-04-04 07:32:02

标签: c# lambda backup

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) 我在我的表单上使用列表来添加这些例外。 我还需要排除某些文件和文件夹,但如果我知道如何执行此操作,我想我可以这样做。

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);
        }
    }

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

从您要设置扩展名的表单中排除要包含要跳过的扩展名的字符串的填充列表,如下所示:

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

在你的内循环中,从

更改foreach循环
foreach (var file in sourcedir.GetFiles())

进入这个

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();