gpt4 book ai didi

c# - 复制文件Ex "The parameter is invalid"错误

转载 作者:行者123 更新时间:2023-12-03 02:58:16 26 4
gpt4 key购买 nike

我正在编写一个(相当)简单的 C# 应用程序,使用 .NET 4 在运行可执行文件之前检查更新。如果网络共享上存在较新版本的 exe,只需将其复制到本地文件夹并启动即可。一切都很完美,除了在阅读有关 File.Copy() 的限制时,我意识到在执行此操作时我将无法显示进度条,而且我看到的所有内容都说要使用 CopyFileEx,所以我'我正在尝试这样做。

我使用了示例代码here它编译得很好(尽管我仍然有点不确定后台工作程序到底是如何发挥作用的),除了当我实际去运行应用程序时,CopyFilEx() 方法返回 false,错误是“参数不正确” ”。

我的代码(仅相关部分,如果需要,我会添加更多内容)

调用函数:

XCopy.Copy(strServerAppPath + strExeName, strLocalAppPath + strExeName, true, true, (o,    pce) =>
{
worker.ReportProgress(pce.ProgressPercentage, strServerAppPath + strExeName);
});

(源路径计算结果为“C:\test.txt”,目标路径计算为“C:\test\test.txt”)

上面链接的代码中发生错误的位置:

bool result = CopyFileEx(Source, Destination, new CopyProgressRoutine(CopyProgressHandler), IntPtr.Zero, ref IsCancelled, copyFileFlags);
if (!result)
throw new Win32Exception(Marshal.GetLastWin32Error());

提前感谢您的帮助,我已经为此苦苦挣扎了几个小时......

最佳答案

与其处理所有的编码,不如“滚动你自己的”复印机逐 block 进行:

private static void CopyFile(string source, string destination, int bytesPerChunk)
{
int bytesRead = 0;

using (FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs))
{
using (FileStream fsDest = new FileStream(destination, FileMode.Create))
{
BinaryWriter bw = new BinaryWriter(fsDest);
byte[] buffer;

for (int i = 0; i < fs.Length; i += bytesPerChunk)
{
buffer = br.ReadBytes(bytesPerChunk);
bw.Write(buffer);
bytesRead += bytesPerChunk;
ReportProgress(bytesRead, fs.Length); //report the progress
}
}
}
}
}

关于c# - 复制文件Ex "The parameter is invalid"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com