Эффективное копирование нескольких файлов - PullRequest
10 голосов
/ 21 октября 2008

Мне нужно скопировать довольно много файлов из одной папки в другую. В настоящее время я делаю это следующим образом:

string[] files = Directory.GetFiles(rootFolder, "*.xml");
foreach (string file in files)
{
    string otherFile = Path.Combine(otherFolder, Path.GetFileName(file));
    File.Copy(file, otherFile);
}

Это самый эффективный способ? Кажется, чтобы взять возраст.

РЕДАКТИРОВАТЬ: я действительно спрашиваю, есть ли более быстрый способ сделать пакетную копию вместо копирования отдельных файлов, но я думаю, что ответ - нет.

Ответы [ 3 ]

8 голосов
/ 21 октября 2008

Я не могу придумать более эффективный способ, чем File.Copy, он идет прямо в ОС.

С другой стороны, если это займет так много времени, я настоятельно рекомендую показать диалог прогресса - как SHFileOperation делает это за вас. По крайней мере, ваши пользователи будут знать, что происходит.

1 голос
/ 21 октября 2008

Я недавно реализовал свои копии файлов, используя файловые потоки в VB .NET:

fsSource = New FileStream(backupPath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None, 1024, FileOptions.WriteThrough)
fsDest = New FileStream(restorationPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, 1024, FileOptions.WriteThrough)
TransferData(fsSource, fsDest, 1048576)

    Private Sub TransferData(ByVal FromStream As IO.Stream, ByVal ToStream As IO.Stream, ByVal BufferSize As Integer)
        Dim buffer(BufferSize - 1) As Byte

        Do While IsCancelled = False 'Do While True
            Dim bytesRead As Integer = FromStream.Read(buffer, 0, buffer.Length)
            If bytesRead = 0 Then Exit Do
            ToStream.Write(buffer, 0, bytesRead)
            sizeCopied += bytesRead
        Loop
    End Sub

Кажется, это быстрый и очень простой способ обновить индикатор выполнения (с помощью sizeCopied) и отменить передачу файла, если это необходимо (с IsCancelled).

1 голос
/ 21 октября 2008

Вы можете использовать операционную систему для перемещения файлов. Это то, что делают такие инструменты, как WinMerge. Вы нажимаете кнопку «Копировать» в своем приложении, и появляется окно прогресса Windows, как если бы вы использовали Проводник для упорядочивания копии. Эта тема описывает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...