Мне нужно скопировать папку C: \ FromFolder в C: \ ToFolder
Ниже приведен код, который ВЫРЕЗИТ мой FromFolder, а затем создаст мою ToFolder. Итак, моя FromFolder исчезнет, а все элементы будут во вновь созданной папке с именем ToFolder.
// To copy all the files in one directory to another directory.
// Get the files in the source folder. (To recursively iterate through
// all subfolders under the current directory, see
// "How to: Iterate Through a Directory Tree.")
// Note: Check for target path was performed previously
// in this code example.
if (System.IO.Directory.Exists(sourcePath))
{
string[] files = System.IO.Directory.GetFiles(sourcePath);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
fileName = System.IO.Path.GetFileName(s);
destFile = System.IO.Path.Combine(targetPath, fileName);
System.IO.File.Copy(s, destFile, true);
}
}
Ответ 2 · рейтинг 18 · RvdK
есть копия файла. Восстановите папку и скопируйте все файлы из исходного каталога в новый пример
static void Main(string[] args)
{
DirectoryInfo sourceDir = new DirectoryInfo("c:\\a");
DirectoryInfo destinationDir = new DirectoryInfo("c:\\b");
CopyDirectory(sourceDir, destinationDir);
}
static void CopyDirectory(DirectoryInfo source, DirectoryInfo destination)
{
if (!destination.Exists)
{
destination.Create();
}
// Copy all files.
FileInfo[] files = source.GetFiles();
foreach (FileInfo file in files)
{
file.CopyTo(Path.Combine(destination.FullName,
file.Name));
}
// Process subdirectories.
DirectoryInfo[] dirs = source.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
// Get destination directory.
string destinationDir = Path.Combine(destination.FullName, dir.Name);
// Call CopyDirectory() recursively.
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}
Ответ 3 · рейтинг 5 · Community
Копирование каталогов (правильное) на самом деле является довольно сложной задачей, особенно если принять во внимание передовые методы файловой системы, такие как переходы и жесткие ссылки. Лучше всего использовать API, который его поддерживает. Если вы не боитесь небольшого P / Invoke, лучше всего подойдет SHFileOperation в shell32. Другой альтернативой было бы использование метода Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory в сборке Microsoft.VisualBasic (даже если вы не используете VB).
Вам нужно будет создать новый каталог с нуля, затем перебрать все файлы в исходном каталоге и скопировать их.
string[] files = Directory.GetFiles(GlobalVariables.mstrReadsWellinPath);
foreach(string s in files)
{
fileName=Path.GetFileName(s);
destFile = Path.Combine(DestinationPath, fileName);
File.Copy(s, destFile);
}
Я оставляю создание каталога назначения вам :-)
Ответ 6 · рейтинг 2 · Jonathan van de Veen
Ты прав. Метод Directory.Copy отсутствует. Это был бы очень мощный метод, но также и опасный для ничего не подозревающего разработчика. Копирование папки может потенциально занять очень много времени, в то время как перемещение папки (на том же диске) - нет.
Думаю, Microsoft подумала, что будет иметь смысл копировать файл за файлом, чтобы вы могли затем показать какую-то информацию о ходе выполнения. Вы можете перебирать файлы в каталоге, создав экземпляр DirectoryInfo и затем вызвав GetFiles (). Чтобы также включить подкаталоги, вы также можете вызвать GetDirectories () и перечислить их с помощью рекурсивного метода.
Ответ 7 · рейтинг 2 · Ramil Shavaleev
Простая функция, которая копирует все содержимое исходной папки в целевую папку и создает целевую папку, если она не существует.
class Utils
{
internal static void copy_dir(string source, string dest)
{
if (String.IsNullOrEmpty(source) || String.IsNullOrEmpty(dest)) return;
Directory.CreateDirectory(dest);
foreach (string fn in Directory.GetFiles(source))
{
File.Copy(fn, Path.Combine(dest, Path.GetFileName(fn)), true);
}
foreach (string dir_fn in Directory.GetDirectories(source))
{
copy_dir(dir_fn, Path.Combine(dest, Path.GetFileName(dir_fn)));
}
}
}
К сожалению, в System.IO нет встроенной функции, которая копирует папку и ее содержимое. Ниже приводится простой рекурсивный алгоритм, который копирует папку, ее подпапки и файлы, при необходимости создавая папку назначения. Для простоты обработка ошибок отсутствует; исключение будет сгенерировано, если что-то пойдет не так, например, пустые или недопустимые пути или если файлы назначения уже существуют.
Удачи!
Ответ 9 · diegodsp
Моя версия DirectoryInfo.CopyTo с использованием расширения.
public static class DirectoryInfoEx {
public static void CopyTo(this DirectoryInfo source, DirectoryInfo target) {
if (source.FullName.ToLower() == target.FullName.ToLower())
return;
if (!target.Exists)
target.Create();
foreach (FileInfo f in source.GetFiles()) {
FileInfo newFile = new FileInfo(Path.Combine(target.FullName, f.Name));
f.CopyTo(newFile.FullName, true);
}
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) {
DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
diSourceSubDir.CopyTo(nextTargetSubDir);
}
}
}
И использовать вот так ...
DirectoryInfo d = new DirectoryInfo("C:\Docs");
d.CopyTo(new DirectoryInfo("C:\New"));