Я использую следующий метод для копирования содержимого каталога в другой каталог.Метод копирования больших объемов данных в C#
public void DirCopy(string SourcePath, string DestinationPath)
{
if (Directory.Exists(DestinationPath))
{
System.IO.DirectoryInfo downloadedMessageInfo = new DirectoryInfo(DestinationPath);
foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories())
{
dir.Delete(true);
}
}
//=================================================================================
string[] directories = System.IO.Directory.GetDirectories(SourcePath, "*.*", SearchOption.AllDirectories);
Parallel.ForEach(directories, dirPath =>
{
Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
});
string[] files = System.IO.Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories);
Parallel.ForEach(files, newPath =>
{
File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);
});
}
Моя единственная проблема в том, что есть совсем немного данных в исходном пути и программа становится не реагирует, а копирование происходит.
Мне интересно, какие у меня варианты для копирования данных. Я провел некоторое исследование, и кто-то рекомендовал использовать буфер.
Я действительно не видел решения, которые я понимаю особенно хорошо, поэтому любая помощь/ресурсы, которые являются ясными и лаконичными, были бы замечательными.
Спасибо за помощь!
Вы можете использовать отдельный поток, чтобы запустить его вместо того, чтобы запустить его в потоке пользовательского интерфейса. –
Можете ли вы количественно определить некоторые вещи, которые вы копируете? Как каталоги, файлы, количество данных, которые вы передаете, вы можете использовать неправильный инструмент для задания – konkked
Это приложение для пользовательского интерфейса? Если это так, выполните эту работу в фоновом потоке. Например, с помощью 'Task.Run' –