我正在寫一個(相當)簡單的C#應用程序,使用.NET 4在運行可執行文件之前檢查更新。如果網絡共享上存在更新版本的exe,只需將其複製到本地文件夾並啓動即可。除了在瞭解File.Copy()的侷限性時,這一切都工作得很完美,我意識到當我這樣做時我不能顯示進度條,而且我看到的所有內容都表示使用CopyFileEx,米試圖做到這一點。CopyFileEx「參數無效」錯誤
我使用的樣例代碼中發現here,它編譯罰款(雖然我仍然BackgroundWorker的究竟是如何發揮作用的有點不確定),除了當我真正去運行應用程序時,CopyFilEx()方法返回錯誤,錯誤是「參數不正確」。
我的代碼(有關章節而已,我會添加更多的如果需要的話)
調用函數:
XCopy.Copy(strServerAppPath + strExeName, strLocalAppPath + strExeName, true, true, (o, pce) =>
{
worker.ReportProgress(pce.ProgressPercentage, strServerAppPath + strExeName);
});
(源路徑的計算結果爲 「C:\ test.txt的」 和的目標路徑 「C:\測試\ test.txt的」)
凡在上面的代碼鏈接錯誤發生:
bool result = CopyFileEx(Source, Destination, new CopyProgressRoutine(CopyProgressHandler), IntPtr.Zero, ref IsCancelled, copyFileFlags);
if (!result)
throw new Win32Exception(Marshal.GetLastWin32Error());
在此先感謝您的幫助,我一直在爲此奮鬥了幾個小時...
看起來很有意思......我以前見過類似的答案,但一般認爲似乎是copyfileex更好(如果真的可以讓它工作)。不管怎麼說,我都會試一試:) – Mansfield 2012-04-27 16:53:33
它很有效,所以我會去用它。非常感謝! – Mansfield 2012-04-27 17:32:03
使用'ReadBytes(byte [],int,int)'方法可能會更好,它可以重用相同的緩衝區,而不是爲每個讀操作創建一個新的數組。 (http://msdn.microsoft.com/en-us/library/ms143295.aspx) – 2012-04-27 20:34:58