读取整个std :: ifstream到堆

时间:2013-07-03 09:45:55

标签: c++

我无法理解为什么这不起作用。从我所知,它似乎并没有读取整个图像文件...虽然我不知道。我基本上有一些原始图像,我想把它读到堆上。

unsigned char* ReadImageFromFile(const char* FILENAME, unsigned int SIZE_BYTES)
{
    unsigned char *data = (unsigned char*) malloc(SIZE_BYTES);

    std::ifstream image(FILENAME);
    image.read((char*) data, SIZE_BYTES);
    image.close();

    return data;
}

2 个答案:

答案 0 :(得分:6)

1)以二进制模式打开文件

2)不要返回需要释放的原始指针

std::string readImageFromFile(const char* filename)
{
    std::ifstream image(filename, std::ios::binary);
    std::ostringstream data;
    data << image.rdbuf();
    return data.str();
}

或者,如果你喜欢编写容易出错的代码(似乎很受嵌入式人群欢迎),你可以这样做:

char* readImageFromFile(const char* filename)
{
    std::ifstream image(filename, std::ios::binary);
    std::ostrstream data;
    data << image.rdbuf();
    data.freeze();
    return data.str();
}

当然,不推荐使用strstreams。

答案 1 :(得分:3)

尝试std::ifstream image(FILENAME, std::ios_base::binary);(注意ifstream构造函数的第二个参数)。