簡體   English   中英

從備份應用程序C#中排除文本文件等

[英]Excluding text files etc. from a backup application C#

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

有什么想法嗎?

在您要設置要排除的擴展名的表單中,填寫包含要跳過的擴展名的字符串列表,如下所示:

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列表中指定的extensionsToSkip

在上述循環之前,通過觀察兩個列表(僅用於測試)來測試文件數是否正確:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM