2011-07-14 98 views
15

我將使用我的winforms應用程序通過網絡複製一個大文件,我需要顯示某種進度條。我只想着簡單地顯示內置文件複製對話框,而不是製作自己的複製例程。如何調出內置文件複製對話框?

我還需要一個「完全複製」和「複製失敗」的通知。

我需要這在Windows XP,Vista和7的工作是有一個方法來調用從我的C#代碼搞這個功能?

+0

可能的重複[如何調用shell「文件複製對話框」報告進度在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/en-us/library/bb762164.aspx)的功能。 –

回答

17

答案摘自:http://msdn.microsoft.com/en-us/magazine/cc163304.aspx

Windows Vista中確實包括支持完全是一個新的複製引擎,你會找什麼做的。但是,以前的現有功能可能會滿足您的需求。例如,如果要複製,移動,重命名或刪除單個文件或目錄,則可以利用已由VisualBasic®運行時包裝的SHFileOperation(從shell32.dll公開)。如果你正在使用Visual Basic 2005,你可以簡單地從我的命名空間中使用的功能,例如:

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

實現在C#同樣的事情只涉及多一點的工作,加入到Microsoft.VisualBasic程序的參考。 DLL(從Microsoft®.NET Framework安裝目錄),並使用代碼如下所示:

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

運行時,這將導致在同一個進度界面,你會看到,如果你在做同一個文件操作從Windows資源管理器。事實上,在Windows Vista上運行時,您將自動獲得新的Window Vista進度UI,如圖1所示。Dialog

+2

引用來源時,請用引號引用來源。通常只是引用別的東西而沒有任何額外的上下文或解釋的答案通常會被忽視。 –

+0

大部分是引用,但不是逐字。爲了簡潔起見,我做了一些編輯,所以我決定不去引用。最近我編輯了這篇文章,這將使社區更加快樂。 – ja72

+0

我需要編寫一個備份和恢復util來顯示您在答案中提供的GUI進度對話框,但更喜歡一個不需要運行時或框架的編譯exe。這可以用win32 C++(visual-C++)來完成嗎?如果是這樣,問題是我不知道如何用visual-C++編寫它 –

相關問題