1

あるファイルから別のファイルにブートセクタをコピーするために、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 を存在しないファイルに変更すると、ファイルが作成されません。デバッガーでプログラムを実行すると、エラーは発生しません (両方のファイルがプロジェクト ディレクトリに存在しない場合でも)。

4

1 に答える 1

1
std::ifstream myfile("boot.bin", std::ios::binary || std::ios::in);

「||」許可された?

確認する

"|" 単管

std::ifstream myfile("boot.bin", std::ios::binary | std::ios::in);
于 2013-09-15T14:40:12.007 に答える