Скопируйте все содержимое каталога в С#
Хм, кажется, я неправильно 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
Скопируйте все содержимое каталога в С#
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.