2011-07-14 15 views
15

私はwinformsアプリケーションを使用してネットワーク上で大きなファイルをコピーするので、何らかのプログレスバーを表示する必要があります。私自身のコピールーチンを調理するのではなく、組み込みのファイルコピーダイアログを表示する方がいいかもしれないと考えていました。組み込みのファイルコピーダイアログを表示する方法は?

また、「コピー完了」と「コピー失敗」通知が必要です。

Windows XP、Vista、および7で動作するにはこのコードが必要です。この機能をC#コードから呼び出す方法はありますか?取ら

+0

「[ファイルコピー]ダイアログ」を呼び出すとどのように進行状況を報告できますかWin32でのコピーの?](http://stackoverflow.com/questions/5729808/how-do-i-invoke-the-shell-file-copy-dialog-to-report-the-progress-of-a-コピーイン) –

+0

代わりに 'xcopy'や' robocopy'を使うのが良いでしょう。可能な複製http://stackoverflow.com/q/3124038/380384 – ja72

+0

フレームワークがこれをサポートしているかどうかわかりませんが、p/invoke [SHFileOperation()](http://msdn.microsoft .com/ja-ja/library/bb762164.aspx)関数を使用します。 –

答えて

17

回答:http://msdn.microsoft.com/en-us/magazine/cc163304.aspx

Windows Vistaは確かにあなたがする探している正確に何をサポートする新しいコピーエンジンを含みません。ただし、既存の機能がお客様のニーズを満たす可能性があります。たとえば、個々のファイルまたはディレクトリをコピー、移動、名前変更、または削除する場合は、VisualBasic®ランタイムで既にラップされているSHFileOperation(shell32.dllから公開)を利用できます。あなたは、Visual Basic 2005のを使用している場合は、単にたとえば、私の名前空間からの機能を使用することができます。C#で同じことを達成する

My.Computer.FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs) 

は、Microsoft.VisualBasicへの参照を追加し、少しだけ多くの作業を必要とします。 (マイクロソフトの.NET Frameworkのインストールディレクトリから)DLLと次のようなコードを使用して:

using Microsoft.VisualBasic.FileIO; 
... 
FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs); 

実行すると、これはあなたが同じファイル操作をしていた場合は、参照してくださいね同じ進行状況UIになりますWindowsエクスプローラから。実際、Windows Vista上で実行すると、図1に示すように新しいWindow Vistaの進行状況のUIが自動的に表示されます。Dialog

+2

ソースを引用するときは、ソースを引用符で囲みます。追加の文脈や説明なしで何かを引用するだけの回答は、一般的には眉をひそめます。 –

+0

ほとんど引用されていますが、逐語的ではありません。簡潔さのため編集した部分がありますので、私は引用符で囲まないことにしました。私は最近、コミュニティをより幸せにするつもりである投稿を編集しました。 – ja72

+0

私はあなたの答えであなたが提供したGUIの進捗状況ダイアログボックスを表示するバックアップと復元utilを書く必要がありますが、実行時やフレームワークを必要としないコンパイル済みのexeが好ましいです。これはwin32 C++(visual-C++)で行うことができますか?trueの場合、Visual C++で書く方法はわかりません。 –

関連する問題