Подтвердить что ты не робот

Скопировать все файлы в каталог

Как я могу скопировать все содержимое в один каталог в другой, не используя цикл для каждого файла?

4b9b3361

Ответ 1

Вы не можете. Ни Directory, ни DirectoryInfo предоставляют Copy метод. Вам нужно реализовать это самостоятельно.

void Copy(string sourceDir, string targetDir)
{
    Directory.CreateDirectory(targetDir);

    foreach(var file in Directory.GetFiles(sourceDir))
        File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));

    foreach(var directory in Directory.GetDirectories(sourceDir))
        Copy(directory, Path.Combine(targetDir, Path.GetFileName(directory)));
}

Прочитайте комментарии, чтобы знать о некоторых проблемах с этим упрощенным подходом.

Ответ 3

Вы можете использовать метод VBs FileSystem.CopyDirectory для упрощения задачи:

using Microsoft.VisualBasic.FileIO;

foo(){
    FileSystem.CopyDirectory(directoryPath, tempPath);
}

Ответ 4

using System.IO;

string sourcePath = @"D:\test";
string targetPath = @"D:\test_new";
if (!Directory.Exists(targetPath))
{
   Directory.CreateDirectory(targetPath);
}
foreach (var srcPath in Directory.GetFiles(sourcePath))
{
    //Copy the file from sourcepath and place into mentioned target path, 
    //Overwrite the file if same file is exist in target path
    File.Copy(srcPath, srcPath.Replace(sourcePath, targetPath), true);
}

Ответ 5

Вы не можете. Но вы можете использовать какой-то краткий код, например Directory.GetFiles(mydir).ToList().ForEach(f => File.Copy(f, otherdir + "\\" f);

Ответ 6

Выполнить xcopy source_directory\*.* destination_directory в качестве внешней команды. Конечно, это будет работать только на машинах Windows.

Ответ 7

Здесь итеративное решение. Это использует Directory.GetFiles рекурсивное извлечение всех файлов во всех каталогах и подкаталогах из исходного каталога, сохраняя эту структуру каталогов при копировании в целевой каталог:

string sourceDir, targetDir;

Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories).ToList()
    .ForEach(file =>
    {
        var targetPath = Path.Combine(targetDir, Path.GetRelativePath(sourceDir, file));
        var fileInfo = new FileInfo(targetPath);
        Directory.CreateDirectory(fileInfo.DirectoryName);
        File.Copy(file, fileInfo.FullName);
    });

Ответ 8

Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + @"resources\html")
    .ToList()
    .ForEach(f => File.Copy(f, folder + "\\" + f.Substring(f.LastIndexOf("\\"))));