Как я могу скопировать все содержимое в один каталог в другой, не используя цикл для каждого файла?
Скопировать все файлы в каталог
Ответ 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)));
}
Прочитайте комментарии, чтобы знать о некоторых проблемах с этим упрощенным подходом.
Ответ 2
У Msdn есть рекомендации по этому вопросу - Как копировать каталоги
Ответ 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("\\"))));