Скопируйте все содержимое каталога в С#

Хм, кажется, я неправильно directories понял вопрос, но я рискну. Что directories не так со следующим простым folders методом?

public static void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo target) {
    foreach (DirectoryInfo dir in source.GetDirectories())
        CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name));
    foreach (FileInfo file in source.GetFiles())
        file.CopyTo(Path.Combine(target.FullName, file.Name));
}

РЕДАКТИРОВАТЬ Поскольку эта публикация copy собрала внушительное количество folders голосов за такой простой dotnet ответ на такой же простой c#-language вопрос, позвольте мне добавить .cs-file объяснение. Пожалуйста прочтите это перед голосованием.

Прежде всего, этот код не предназначен для замены кода folder в вопросе. Это только для folders иллюстрации.

Microsoft.VisualBasic.Devices.Computer.FileSystem.CopyDirectory выполняет некоторые .net-framework дополнительные проверки правильности visual-c# (например, являются ли источник dotnet и цель допустимыми каталогами, является c#.net ли источник родителем цели c#.net и т. д.), которые отсутствуют directories в этом ответе. Этот код, вероятно, также c-sharp более оптимизирован.

При этом folder код работает хорошо. Он уже (почти идентично) использовался dotnet в зрелом программном обеспечении visual-c# в течение многих лет. Помимо .net присущей всем операциям ввода-вывода copy непостоянства (например, что dot-net произойдет, если пользователь directory вручную отключит USB-накопитель dotnet во время записи на него кода?), известных dir проблем не существует.

В частности, хочу .net-framework отметить, что использование c#.net рекурсии здесь абсолютно dir не проблема. Ни в теории directory (концептуально это самое copy изящное решение), ни на практике: этот код не переполнит стек. Стек dot-net достаточно велик, чтобы обрабатывать c# даже глубоко вложенные иерархии folders файлов. Задолго до того, как c#.net место в стеке становится directories проблемой, вступает в силу directory ограничение длины пути к c# папке.

Обратите внимание, что directories злонамеренный пользователь может нарушить это предположение, используя .cs-file глубоко вложенные каталоги c-sharp по одной букве в каждом. Я .net не пробовал это. Но просто directories для иллюстрации: для того, чтобы c-sharp этот код переполнялся на .net-framework обычном компьютере, каталоги folders должны быть вложены несколько visual-c# тысяч раз. Это просто нереальный copy сценарий.

c#

.net

directory

copy

2022-11-05T12:42:06+00:00
Вопросы с похожей тематикой, как у вопроса:

Скопируйте все содержимое каталога в С#