10

あるフォルダーから別のフォルダーにかなりの数のファイルをコピーする必要があります。現在、私はこのようにしています:

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

それが最も効率的な方法ですか?何年もかかるようです。

編集:個々のファイルをコピーする代わりに、バッチコピーを行うより高速な方法があるかどうかを本当に尋ねていますが、答えはノーだと思います。

4

3 に答える 3

8

File.Copy よりも効率的な方法は考えられません。OS に直接送信されます。

一方、それほど時間がかかる場合は、進行状況ダイアログを表示することを強くお勧めします-SHFileOperationがそれを行います。少なくとも、ユーザーは何が起こっているかを知ることができます。

于 2008-10-21T16:32:04.340 に答える
1

最近、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を使用)のは、高速で非常に簡単な方法のようです。

于 2008-10-21T17:30:09.623 に答える
1

オペレーティング システムを使用してファイルを移動できます。これは、WinMerge のようなツールが行うことです。アプリの [コピー] ボタンをクリックすると、エクスプローラーを使用してコピーを配置したかのように、Windows の進行状況ボックスがポップアップ表示されます。このスレッドはそれを説明しています。

于 2008-10-21T16:24:20.003 に答える