1

重複の可能性:
ファイルを std::vector<char> に読み込む効率的な方法は?

これはおそらく簡単な質問ですが、私は C++ が初めてで、これを理解できません。バイナリ ファイルをロードし、各バイトをベクターにロードしようとしています。これは小さなファイルでは問題なく動作しますが、410 バイトを超えるファイルを読み取ろうとすると、プログラムがクラッシュして次のように表示されます。

このアプリケーションは、異常な方法で終了するようランタイムに要求しました。詳細については、アプリケーションのサポート チームにお問い合わせください。

Windows で code::blocks を使用しています。

これはコードです:

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    std::vector<char> vec;
    std::ifstream file;
    file.exceptions(
        std::ifstream::badbit
      | std::ifstream::failbit
      | std::ifstream::eofbit);
    file.open("file.bin");
    file.seekg(0, std::ios::end);
    std::streampos length(file.tellg());
    if (length) {
        file.seekg(0, std::ios::beg);
        vec.resize(static_cast<std::size_t>(length));
        file.read(&vec.front(), static_cast<std::size_t>(length));
    }

    int firstChar = static_cast<unsigned char>(vec[0]);
    cout << firstChar <<endl;
    return 0;
}
4

1 に答える 1

2

コードの何が問題なのかわかりませんが、このコードで同様の質問に答えました。

バイトをunsigned char次のように読み取ります。

ifstream infile;

infile.open("filename", ios::binary);

if (infile.fail())
{
    //error
}

vector<unsigned char> bytes;

while (!infile.eof())
{
    unsigned char byte;

    infile >> byte;

    if (infile.fail())
    {
        //error
        break;
    }

    bytes.push_back(byte);
}

infile.close();
于 2012-10-13T20:40:03.637 に答える