我正在尝试在Windows中实现dd等效项。 [澄清:我正在尝试复制dd的= / dev / hdb = = dev / hdb功能,以便将Windows安装迁移到更大的HD。很奇怪,我现在成功地使用了这种方法几次。 - G]
该程序可行(我最终将源数据复制到目标磁盘)但不会自行终止 - 一旦我确定已经读取了整个源磁盘,我必须完成它。
使用CreateFile调用中的“\\。\ PhysicalDriveX”语法打开和锁定源和目标物理驱动器没有问题。
我的问题是成功检测到源驱动器数据的结束。
目前我正在使用以下方式阅读32K块:
// doesn't work - won't detect End-of-valid drive data and reads endlessly
while (( success = ReadFile(hInfile, buffer, BUFSIZE, &nRead, NULL )) && nRead != 0) {
// ... write the data to the target drive; break if it fails.
// ... write a progress indicator to the console
}
// should execute but never does
if (! success) {
// an error occurred, do cleanup.
}
else {
// all done, unlock & close filehandles
puts("ta da!");
}
'正常'文件的EOF(在同步io期间)由ReadFile发出信号,返回TRUE,但将读取的字节数(nRead)设置为0.这就是我在笨拙的while()语句中尝试的。
ReadFile一旦读取了源PhysicalDrive上有效数据的末尾,就会返回空字节块。
知道何时停止阅读的正确方法是什么? - 我应该在开始之前使用IOCTL_DISK_GET_LENGTH_INFO吗?它似乎有点多余,因为ReadFile应该在读取超过磁盘末尾时报告EOF(或失败)。
提前致谢。