我正在写一个(相当)简单的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