Вопрос по .net, file – Как скопировать папку и все подпапки и файлы в .NET? [Дубликат]

29

Possible Duplicate:
Best way to copy the entire contents of a directory in C#

Я хочу скопировать папку со всеми ее подпапками и файл из одного места в другое в .NET. Какой лучший способ сделать это?

Я вижу метод Copy в классе System.IO.File, но мне было интересно, есть ли более простой, лучший или более быстрый способ, чем сканировать дерево каталогов.

Я с нетерпением жду, когда мне нужно будет выполнить операции в файловой системе, потому что у меня есть законное оправдание для использования рекурсии! mmcdole
xneuron.wordpress.com/2007/04/12/… может быть полезным для вас; это показывает простой рекурсивный метод Daniel LeCheminant

Ваш Ответ

3   ответа
12

сообщение:

Microsoft's explanation about why there shouldn't be a Directory.Copy() operation in .NET. An implementation of CopyDirectory() from the Microsoft.VisualBasic.dll assembly.

Однако рекурсивная реализация основана наFile.Copy() а такжеDirectory.CreateDirectory() должно хватить для самых основных потребностей.

Это интересная ссылка. Я не уверен, что аргументы Microsoft содержат много воды. Но это объясняет, почему функциональность отсутствует. dthrasher
2

Process.Start разжечьrobocopy.exe?

@ Brain2000 вы всегда можете использовать короткие пути, если пробелы являются проблемой
Robocopy неправильно анализирует кавычки при запуске с Process.Start, поэтому пути источника / назначения не должны содержать пробелов. Если они это сделают, вы должны использовать имя файла 8dot3. Кажется, единственный раз, когда Robocopy правильно принимает кавычки, это из командной строки или файла BAT.
49

есть реализация VisualBasic.dll, на которую ссылается Стив, и вот то, что я использовал.

private static void CopyDirectory(string sourcePath, string destPath)
{
    if (!Directory.Exists(destPath))
    {
        Directory.CreateDirectory(destPath);
    }

    foreach (string file in Directory.GetFiles(sourcePath))
    {
        string dest = Path.Combine(destPath, Path.GetFileName(file));
        File.Copy(file, dest);
    }

    foreach (string folder in Directory.GetDirectories(sourcePath))
    {
        string dest = Path.Combine(destPath, Path.GetFileName(folder));
        CopyDirectory(folder, dest);
    }
}

Похожие вопросы