#c_sharp
Думал написать вот так:
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",
так как этот файл используется другим процессом. Есть ли возможность или какие-то варианты
одновременно скопировать файл по разным путям? Или есть какие-то варианты ускорить
сей процесс? Спасибо.
Ответы
Ответ 1
Реализация через 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");Ответ 2
Вот так еще проще: public void ParallelCopy(string src, params string[] dsts) { var bytes = File.ReadAllBytes(src); Parallel.ForEach(dsts, d => File.WriteAllBytes(bytes, d)); }
Комментариев нет:
Отправить комментарий