我正在用 C++ 编写一个非常简单的程序,将引导扇区从一个文件复制到另一个文件。我的代码是:
#include <fstream>
int main ()
{
char buffer[512];
std::fstream myfile ("boot.bin", std::ios::binary || std::ios::in);
myfile.seekg(0);
myfile.read(buffer, 512);
myfile.close();
myfile.open("boot.img", std::ios::binary || std::ios::out);
myfile.seekp(0);
myfile.write(buffer, 512);
myfile.close();
return 0;
}
但是,当我尝试编译时,出现错误:
链接:
生成代码
完成生成代码
Bootcopy.vcxproj -> c:\users\xxx\documents\visual studio 2010\Projects\Bootcopy\Release\Bootcopy.exe
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4 .0\Microsoft.CppCommon.targets(562,5):错误 MSB6006:“mt.exe”以代码 31 退出。
我已经用谷歌搜索了这个错误,但我只找到了对我不起作用的解决方案。奇怪的是,如果我重建解决方案(Build > Rebuild Solution 或 CTRL + ALT + F7),我能够编译代码。当我正常编译时,我得到一个“构建失败”(如果这是重建后的第一个构建),或者一个“构建成功”(如果我改变了一些东西)。
此外,生成的可执行文件似乎不起作用。这个想法是将前 512 个字节从 boot.bin 复制到 boot.img。字节似乎读取正确(我在代码中输入了“cout << buffer”,并且字符串被正确打印到第一个空字符),但没有写入 boot.img。当我将 boot.img 更改为不存在的文件时,没有创建文件。当我在调试器中运行程序时,我没有收到任何错误(即使两个文件在项目目录中都不存在)。