从备份应用程序 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
列表中指定的扩展名。
在提到的循环之前,通过观察两个列表(仅用于测试)来测试您是否获得了正确数量的文件:
var originalList = sourcedir.GetFiles();
var filteredList = sourcedir.GetFiles().Where(f => !extensionsToSkip.Contains(f.Extension)).ToList();
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
列表中指定的扩展名。
在提到的循环之前,通过观察两个列表(仅用于测试)来测试您是否获得了正确数量的文件:
var originalList = sourcedir.GetFiles();
var filteredList = sourcedir.GetFiles().Where(f => !extensionsToSkip.Contains(f.Extension)).ToList();