Копировать файлы, содержащие имя, из источника в место назначения c# - PullRequest
0 голосов
/ 28 мая 2020

У меня есть список строк с рядом имен, я хочу найти эти имена в исходном каталоге и скопировать их в место назначения.

Это то, что я пытаюсь но с этим я копирую весь исходный каталог в целевой каталог:

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

Я думал, что l oop список и внешний вид для каждого файла в исходной папке, как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Я предполагаю, что список 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 голос
/ 28 мая 2020

Вы можете перебрать ncs, построить исходный и целевой пути и сделать копию, если файл существует.

Предупреждение: File.Exists() может вызвать состояние гонки. Если вы не уверены, что в этой папке не работает никакой другой процесс, вам следует обработать исключения ввода-вывода.

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);   
    }   
}
1 голос
/ 28 мая 2020

Это происходит потому, что 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);
    }
}

Таким образом вы go через список имен и проверьте, существует ли файл, если он существует, скопируйте файл в папку назначения

...