Скопируйте файл с определенным расширением и его родительскую папку в целевую папку c # - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь решить проблему с приложением, которое я скомпилировал, чтобы ускорить мою работу.Идея состоит в том, чтобы организовать структуру папок автоматически (копировать файлы из исходных в целевые папки), основываясь на расширении файла с помощью приложения WinForm.Проблема в том, что я недавно начал писать код на C # и не могу найти способ справиться с вложенными дублированными файлами в структуре папок.

Пример древовидной структуры:

|   Analysis.xls
|   Handoff request.msg
|   Reference documentation.doc
|   
\---Trados package
    +---DE
    |       Translation text.sdlxliff
    |       
    +---EN
    |       Translation text.sdlxliff
    |       
    +---FR
    |       Translation text.sdlxliff
    |       
    +---SV
    |       Translation text.sdlxliff
    |       
    \---TM
        +---DE
        |       Ref TM.sdltm
        |       
        +---FR
        |       Ref TM.sdltm
        |       
        \---SV
                Ref TM.sdltm

Мне удалось скомпилировать решение (основываясь на некоторых хороших предложениях здесь), чтобы помочь мне с уникальными файлами, однако я не могу обработать дубликаты, вложенные в языковые папки.

{
    var sourcePath = @"C:\Users\Home\Desktop\source";
    var targetPath = @"C:\Users\Home\Desktop\target";
    var extensions = new[] { ".sdlxliff", ".mqxliff", ".sdltm", ".tmx" };

    var files = (from file in System.IO.Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
                 where extensions.Contains(System.IO.Path.GetExtension(file), StringComparer.InvariantCultureIgnoreCase)
                 select new
                 {
                     Source = file,
                     Destination = System.IO.Path.Combine(targetPath, System.IO.Path.GetFileName(file))
                 });
    {
        foreach (var file in files)
            File.Copy(file.Source, file.Destination);

        MessageBox.Show("Done", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);

Ожидаемым результатом будет копирование дублированных файлов с их родительской папкой в ​​целевую папку (т. Е. Если я пытаюсь скопировать текст перевода.sdlxliff перевода из исходного каталога "C: \ Users"\ Home \ Desktop \ source \ Trados package \ DE ", затем файл должен быть добавлен в следующую целевую папку" C: \ Users \ Home \ Desktop \ target \ Trados package \ DE ". То же самое должно произойти с TMпапка и все вложенные в нее файлы.

Спасибо за предложения.

1 Ответ

1 голос
/ 20 июня 2019

Вместо объединения целевого пути с именем исходного файла полностью замените исходную базовую папку на целевую базовую папку:

Destination = file.Replace(sourcePath, targetPath)

Затем, перед копированием, убедитесь, что каталог существует:

foreach (var file in files)
{
    Directory.CreateDirectory(Path.GetDirectoryName(file.Destination));
    File.Copy(file.Source, file.Destination);
}

CreateDirectory вернется без ошибки, если каталог уже существует.

В качестве альтернативы, см. Общие решения для копирования целых каталогов в этот связанный ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...