сколько войны мы можем развернуть на кота?

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

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

РЕДАКТИРОВАНИЕ Начиная с этой регистрации собрало впечатляющее количество downvotes для такого простого ответа на одинаково простой вопрос, позвольте мне добавить объяснение. читает это перед downvoting.

, В первую очередь, этот код не является intendend как общедоступной заменой к коду в вопросе. Это для цели иллюстрации только.

Microsoft.VisualBasic.Devices.Computer.FileSystem.CopyDirectory делает некоторые дополнительные тесты правильности (например, является ли источник и цель действительными каталогами, является ли источник родителем цели и т.д.), которые отсутствуют в этом ответе. Тот код, вероятно, также более оптимизирован.

Однако код работы хорошо . Это имеет (почти тождественно) используемый в зрелом программном обеспечении в течение многих лет. Кроме свойственной переменчивости дарят все обработки IO (например, что происходит, если пользователь вручную отключает Карту памяти, в то время как Ваш код пишет в него?), нет никаких известных проблем.

, В частности, I’d нравится указывать, что использование рекурсии здесь является абсолютно не проблемой. Ни один в теории (концептуально, it’s самое изящное решение), ни на практике: этот код не переполнит стека . Стек является достаточно большим для обработки даже глубоко вложенных файловых иерархий. Задолго до того, как стековое пространство становится проблемой, ограничение длины пути к папке умирает.

Уведомление, что злонамеренный пользователь мог бы быть в состоянии повредить это предположение при помощи глубоко вложенных каталогов одной буквы каждый. Я haven’t попробовал это. Но только проиллюстрировать тезис: чтобы заставить этот код переполниться на типичном компьютере, каталоги должны были бы быть вложены некоторые тысяча времена. Это - просто не реалистический сценарий.

5
задан jojo 31 July 2009 в 01:54
поделиться