Думал написать вот так:
var task1 = Task.Factory.StartNew(() =>
{
File.Copy(Path,NewName1, true);
});
var task2 = Task.Factory.StartNew(() =>
{
File.Copy(Path,NewName2, true);
});
Но бьет исключение, что файл занят другим процессом: An exception of type 'System.IO.IOException' occurred in mscorlib.dll but was not handled in user code
Additional information: Процесс не может получить доступ к файлу "D:\output\log4.txt", так как этот файл используется другим процессом. Есть ли возможность или какие-то варианты одновременно скопировать файл по разным путям? Или есть какие-то варианты ускорить сей процесс? Спасибо.
Ответ
Реализация через FileStream (в зависимости от типичного для задачи объема файла имеет смысл поэкспериментировать с размером буфера):
public void ParallelCopy(string src, params string[] dsts)
{
Parallel.ForEach(dsts, new ParallelOptions(),
dstOne =>
{
using (FileStream source = new FileStream(src, FileMode.Open, FileAccess.Read, FileShare.Read))
using (FileStream destination = new FileStream(dstOne, FileMode.Create))
{
var buffer = new byte[4096];
int read;
while ((read = source.Read(buffer, 0, buffer.Length)) > 0)
{
destination.Write(buffer, 0, read);
}
}
});
}
Использование:
ParallelCopy(@"x:\source.file", @"c:\destination1.file", @"d:\destination2.file");
Комментариев нет:
Отправить комментарий