【发布时间】:2014-05-26 10:14:35
【问题描述】:
我有一个复制我的文件的工作方法,但我想向它添加一个额外的功能。
我只想复制这些文件扩展名:*.mp4、*.LRV 和 *.THM。
您可以在下面看到有 2 个方法和一个 if.. 所以有 3 个方法(没有复制第一个方法的所有内容,因为它不相关)。
其他人告诉我,我需要补充: var extensions = new[] { ".MP4", ".LRV", ".THM" }; var files1 = Directory.GetFiles(GoPro1).Where(file => extensions.Contains(new FileInfo(file).Extension)); 对于第一个方法..但这不对我得到下一个错误:“无法从'String []'转换为'String'”
我想我需要在方法中添加一个循环:copyall。但我不知道我必须做什么样的循环。有人可以帮我解决这个问题吗?
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Locatie = dlg.SelectedPath;
var extensions = new[] { ".MP4", ".LRV", ".THM" };
var files1 = Directory.GetFiles(GoPro1).Where(file => extensions.Contains(new FileInfo(file).Extension));
Copy1(files1, Locatie + @"\" + "GoPro1");
}
public void Copy1(string sourceDirectory, string targetDirectory){
DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);
//Gets size of all files present in source folder.
GetSize(diSource, diTarget);
maxbytes = maxbytes / 1024;
progressBar1.Maximum = maxbytes;
CopyAll(diSource, diTarget);
}
public void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
foreach (FileInfo fi in source.GetFiles())
{
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
total += (int)fi.Length;
copied += (int)fi.Length;
copied /= 1024;
progressBar1.Step = copied;
progressBar1.PerformStep();
label1.Text = (total / 1048576).ToString() + "MB van de " + (maxbytes / 1024).ToString() + "MB gekopieërd";
label1.Refresh();
}
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
MessageBox.Show("Het kopieren is klaar!");
}
【问题讨论】:
-
我会使用更便宜的
Path.GetExtension(file)而不是new FileInfo(file).Extension -
你的过滤器应该在
CopyAll过程中。 -
Directory.GetFiles 接受通配符。将扩展名作为模式(例如 *.mp4")传递,而不是遍历所有文件。此外,您将文件名数组传递给需要文件夹名称的方法。或者您可以使用 OpenFileDialog 选择具有特定一次通话中的扩展
-
您定义
Copy1带有两个“目录”参数,但 调用 它带有一个文件列表和一个目录 - 这就是问题所在. -
@Hans Kesting 我明白,但我该如何解决这个问题?