C# 复制多个文件

C# 复制多个文件,c#,copy,C#,Copy,我想看看是否有更有效的方法将某些文件从一个文件夹复制到另一个文件夹。有很多文件,所以我想知道是否有更简单的方法。多谢各位 例如: file1.jpg file1.bmp file1.gif file2.jpg file2.bmp file2.bmp if (chkbox1.Checked) { File.Copy(sourcedir + "\\file1.jpg", targetdir + "\\file1.jpg", true); File

我想看看是否有更有效的方法将某些文件从一个文件夹复制到另一个文件夹。有很多文件,所以我想知道是否有更简单的方法。多谢各位

例如:

file1.jpg file1.bmp file1.gif

file2.jpg file2.bmp file2.bmp

if (chkbox1.Checked)
{
   File.Copy(sourcedir + "\\file1.jpg", targetdir + "\\file1.jpg", true); 
   File.Copy(sourcedir + "\\file1.bmp", targetdir + "\\file1.bmp", true);   
   File.Copy(sourcedir + "\\file1.gif", targetdir + "\\file1.gif", true);   
}

if (chkbox2.Checked)
{
   File.Copy(sourcedir + "\\file2.jpg", targetdir + "\\file2.jpg", true); 
   File.Copy(sourcedir + "\\file2.bmp", targetdir + "\\file2.bmp", true);   
   File.Copy(sourcedir + "\\file2.gif", targetdir + "\\file2.gif", true);   
}

这里有一种快速而肮脏的方法来重构代码以减少重复。虽然效率不高,但更易于维护:

    var file1Files = new List<string> { "file1.jpg", "file1.bmp", "file1.gif", };
    var file2Files = new List<string> { "file2.jpg", "file2.bmp", "file2.gif", };

    var files2copy = chkbox1.Checked ? file1Files : file2Files;

    foreach (var file in files2copy)
    {
        File.Copy(Path.Combine(sourcedir, file), Path.Combine(targetdir, file), true);
    }
与我的大多数答案不同,我没有测试过这段代码。但我很有信心它是正确的,或者说非常接近


这基本上是@John的评论,用一些代码充实起来。

一个文件列表和一个循环怎么样?我只是想也许有一个更有效的方法,因为每个批总是由3个文件组成,除了扩展名之外,它们都是相同的名称。我可能只是将我的代码改写成这个。非常感谢。var files2copy=chkbox1。是否选中?file1文件:file2文件;我唯一的另一个问题是这句话。我有一大堆chkbox,所以它不仅仅是file1或file2。我有3,4,5,6,7等等。关于如何处理它有什么建议吗?这是否意味着我必须为每个复选框做一个foreach循环?我不知道。这是你的密码。例如,您可以将循环重构为一个以IEnumerable文件名作为参数的函数。