Копировать каталог из источника в место назначения в зависимости от выбора - PullRequest
0 голосов
/ 19 декабря 2018

Я реализовал функцию CopyDirectoryAndFiles, как показано ниже, но она не работает правильно

Случай - я хочу скопировать / создать NAC -> NAC11 -> NAC12 (это структура папок) из источника в место назначения, он только создает / копирует NAC11->NAC12 Я передаю исходный путь, так как - @"C:\TestArea\Destination\SUP000001\20041202-01-0002-001\NAC последняя часть (\ NAC) выбирается во время выполнения из пользовательского интерфейса, в какую папку вы хотите скопировать, это также может быть несколько папок, если я передаю путь как @"C:\TestArea\Destination\SUP000001\20041202-01-0002-001он копирует все из src->dest, но я хочу выбрать только один ... как я могу справиться с этой ситуацией в приведенном ниже коде?

Main() -

    copyDirectory(@"C:\TestArea\Destination\SUP000001\20041202-01-0002-001\NAC"
,                 @"C:\TestArea\Destination\SUP000005\20150622-1205-0015-M");

Method - 

    private static void copyDirectory(string Source, string destination)
            {
                string[] Files = null;           

                if (destination[destination.Length - 1] != Path.DirectorySeparatorChar)
                {
                    destination += Path.DirectorySeparatorChar;
                }

                if (!Directory.Exists(destination))
                {
                    Directory.CreateDirectory(destination);
                }

                Files = Directory.GetFileSystemEntries(Source);
                foreach (string Element in Files)
                {
                    // Sub directories
                    if (Directory.Exists(Element))
                    {
                        copyDirectory(Element, destination  + Path.GetFileName(Element));
                    }
                    else
                    {
                        // Files in directory
                        File.Copy(Element, destination + Path.GetFileName(Element), true);
                    }
                }

            }

1 Ответ

0 голосов
/ 19 декабря 2018

Если я правильно вас понимаю, у вас есть следующие указанные исходные и конечные каталоги:

var source = @"C:\TestArea\Destination\SUP000001\20041202 - 01 - 0002 - 001\NAC";
var dest = @"C:\TestArea\Destination\SUP000001\20041202-01-0002-001";

И вы хотите скопировать каталог NAC (вместе со всем его содержимым) из source вкаталог destination, но проблема в том, что содержимое каталога NAC копируется непосредственно в папку 20041202-01-0002-001, когда вы действительно хотите получить путь, подобный следующему (и этот каталог NACдолжен быть идентичен исходному каталогу NAC):

@"C:\TestArea\Destination\SUP000001\20041202-01-0002-001\NAC"

Если это так, то вам просто нужно сначала изменить путь к каталогу назначения, добавив в него имя исходного каталога, например, так::

destination = Path.Combine(destination, sourceDir.Name);

Вот пример кода, который должен помочь:

private static void CopyDirectory(string source, string destination)
{
    var sourceDir = new DirectoryInfo(source);
    if (!sourceDir.Exists) throw new DirectoryNotFoundException(nameof(source));

    // Add last directory of source to destination and create it
    destination = Path.Combine(destination, sourceDir.Name);
    Directory.CreateDirectory(destination);

    // Copy files from source to destination
    foreach (var file in sourceDir.GetFiles())
    {
        file.CopyTo(Path.Combine(destination, file.Name));
    }

    // Recursively copy sub directories from source to destination
    foreach (var subDir in sourceDir.GetDirectories())
    {
        CopyDirectory(subDir.FullName, destination);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...