2

私の主な質問は、ユーザーが途中でキャンセルできるファイル操作を行う方法です。

Microsoft.VisualBasic.FileIO次のような名前空間を使用できることはわかっていますFileSystem.DeleteFile(...)が、それは 1 つのファイルのオプションしか与えません。たくさんのファイルをまとめて削除したい。(コピペも同様…)

注:ファイル間だけでなく、大きなファイルをコピーしている最中でも、必要に応じてユーザーが操作をキャンセルできるようにする必要があります。アンマネージ コード (- CopyFileEx) でそれを実行できることはわかっていますが、ネイティブの Windows ダイアログを使用するかどうかに関係なく、それを行うための管理された方法を探しています。

編集: アンマネージ コードの「ラッパー」と「手動」のコピーと削除を提案しました (以下の回答で)。私が見逃している組み込みの方法 (VisualBasic 名前空間のようなものですが、複数のファイル用) はありますか?

4

2 に答える 2

2

私はあなたがこのようなことを行うことができるコピー方法を知っています.Microsoft.VisualBasic NameSpaceを使用してもコードは損なわれません.

Vista 以降で使用できる IFileOperation シェル インターフェイス。この COM インターフェイスのマネージ クラス ラッパーは、この雑誌の記事で入手できます。

以前のバージョンの Windows でも実行する必要がある場合は、既存のコードに頼ってください。

進行状況とキャンセル オプションを使用してファイルをコピーする

于 2012-09-20T17:14:08.650 に答える
1

コピーに関しては、ファイルをチャンクでコピーして手動で行う必要があり、チャンクを処理するたびに、ユーザーがキャンセルフラグを設定したかどうかを確認します。

void CopyStream(Stream in, Stream out) 
{ 
    var buf = new byte[512]; 

    int bytesRead; 
    while((bytesRead = in.Read(buf, 0, buf.Length)) > 0) 
    { 
        out.Write(buf, 0, bytesRead); 
        if(cancelled)
        { 
           // Do you cancel routine
           return; 
        } 
    } 
} 

削除の場合、最善の策は、ファイルの削除を一度に 1 つずつ処理し、上記で説明したのと同じタイプのプロセスを実行することです。

これの利点は、オペレーティング システムに関係なく機能することです。ファイルの種類に関係なく機能します。実装しているスレッドに関係なく機能します。

于 2012-09-20T17:15:43.703 に答える