par*_*ter 1 file-io winapi while-loop
我编写了一个程序,它从一个文件中读取文本并将其复制到一个新文件中。使用 while 循环和 ReadFile/Writefile 函数,我的程序可以工作……但我的程序不会停止运行,除非我强制停止它。我猜我没有正确关闭我的句柄,或者我的 while 循环可能设置错误。一旦我强制停止我的程序,文件就会以新名称成功复制到新位置。
int n = 0;
while(n=ReadFile(hFileSource, buffer, 23, &dwBytesRead, NULL)){
WriteFile(hFileNew, buffer, dwBytesRead, &dwBytesWritten, NULL);
}
CloseHandle(hFileSource);
CloseHandle(hFileNew);
return 0;
Run Code Online (Sandbox Code Playgroud)
您没有正确测试文件结尾。ReadFileEOF 不返回失败,它返回成功但读取了 0 个字节。要正确检查 EOF:
while (ReadFile(hFileSource, buffer, 23, &dwBytesRead, NULL))
{
if (dwBytesRead == 0)
break;
// write data etc
}
Run Code Online (Sandbox Code Playgroud)
有什么理由一次只能读/写 23 个字节吗?这将是相当低效的。