Страницы

Поиск по вопросам

понедельник, 24 декабря 2018 г.

Как скопировать один файл в разные каталоги одновременно?

Думал написать вот так:
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");

Комментариев нет:

Отправить комментарий