将包含名称的文件从源复制到目标 c#。

问题描述 投票:0回答:1

我有一个包含一系列名称的Strings列表,我想在源目录中找到这些名称并将其复制到目标目录中。

这就是我正在尝试的方法,但是我把所有的源目录复制到目标目录中。

        List<string> ncs = new List<string>();
            ncs = getNames();

        foreach (var file in Directory.GetFiles(sourceDir))
             File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));


        foreach (var directory in Directory.GetDirectories(sourceDir))
            CopyNCfromTo(directory, Path.Combine(targetDir, Path.GetFileName(directory)));

我也在尝试用这种方法

List<string> ncs = new List<string>();
            ncs = getNames();
            for (int i = 0; i < ncs.Count; i++)
                {
                  FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles(ncs[i].ToString());
                }

我想通过循环列表来寻找源文件夹中的每一个文件,我怎么做呢?

c# visual-studio visual-studio-2010
1个回答
1
投票

出现这种情况是因为foreach浏览的是文件夹中包含的文件,而不是名称列表,这样一来,所有的文件都会被复制到目标文件夹中。

foreach(string fileName in ncs){
    string path = sourceDir + fileName;
    bool result = System.IO.File.Exists(path);
    if(result == true){
         string destinationPath = targetDir + fileName;
         System.IO.File.Copy(path,destinationPath);
    }
}

这样一来,你就可以通过名称列表来检查文件是否存在,如果存在,就把文件复制到目标文件夹中去


2
投票

我假设ncs列表中只包含名字,而不是文件路径或带扩展名的文件名。

     foreach (var file in Directory.GetFiles(sourceDir))
            if (ncs.Contains(Path.GetFileName(file).Split('.').First()))
                File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));

1
投票

你可以遍历 ncs构建源路径和目标路径,如果文件存在,则进行复制。

需要注意的是。File.Exists() 可以引入一个竞赛条件。如果你不确信该文件夹中没有其他进程在工作,那么你应该处理IO异常。

string sourceDir = "C:\\....";
string targetDir = "C:\\....";

foreach (string filename in ncs)
{
    string srcFile = Path.Combine(sourceDir, filename);
    string destFile = Path.Combine(targetDir, filename);

    if (File.Exists(srcFile))
    {
        File.Copy(srcFile, destFile);   
    }   
}
© www.soinside.com 2019 - 2024. All rights reserved.