あるファイルから別のファイルにブートセクタをコピーするために、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 で終了しました。
このエラーをグーグルで検索しましたが、うまくいかない解決策しか見つかりませんでした。奇妙なことは、ソリューションを再構築するとコードをコンパイルできることです ([ビルド] > [ソリューションの再構築] または CTRL + ALT + F7)。通常どおりコンパイルすると、「ビルドに失敗しました」(これが再ビルド後の最初のビルドである場合)、または「ビルドに成功しました」(何かを変更した場合) のいずれかが表示されます。
また、結果の実行可能ファイルは機能していないようです。アイデアは、最初の 512 バイトを boot.bin から boot.img にコピーすることです。バイトは正しく読み取られているように見えますが (コードに「cout << buffer」を挿入したところ、文字列は最初の null 文字まで正しく出力されました)、boot.img には書き込まれません。boot.img を存在しないファイルに変更すると、ファイルが作成されません。デバッガーでプログラムを実行すると、エラーは発生しません (両方のファイルがプロジェクト ディレクトリに存在しない場合でも)。