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

200
22 июля 2017, 04:32

Думал написать вот так:

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", так как этот файл используется другим процессом. Есть ли возможность или какие-то варианты одновременно скопировать файл по разным путям? Или есть какие-то варианты ускорить сей процесс? Спасибо.

Answer 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");
READ ALSO
Не могу разобраться с VisualStates

Не могу разобраться с VisualStates

Имею в своём приложении стиль для TabItem, решил использовать VisualStateManager вместо обычных триггеровКогда определил состояния Normal и MouseOver всё работало...

293
C#: Какими средствами можно реализовать получение почты на C#?

C#: Какими средствами можно реализовать получение почты на C#?

Доброго времени суток! Возникла необходимость парсить почту на Gmail`еПодскажите пожалуйста средства для подобной реализации

226
Бегает фокус во время работы скрытого Word

Бегает фокус во время работы скрытого Word

При выполнении кода (вызываю скрытое окно Word в котором пересохраняю файлы в другом формате) в момент открытия Word'ом очередного файла, у текущего...

205
Взаимодействие с изображением javascript

Взаимодействие с изображением javascript

Всем приветВозникли проблемы (если быть точнее, то совсем не понимаю) с загрузкой и редактированием изображения

297