ifstream读取后存储的文件长度发生变化

时间:2014-06-02 03:18:46

标签: c++

使用ifstream读取文件时,我发现读取后存储的长度变量从正确的值变为不正确的值。

std::ifstream input_stream(this->file_path_, std::ifstream::binary);

if (input_stream) {
  input_stream.seekg(0, input_stream.end);
  this->length_ = input_stream.tellg();
  input_stream.seekg(0, input_stream.beg);

  std::cout << this->length_ << std::endl; // correct

  input_stream.read((char *) & this->data_, this->length_);

  std::cout << this->length_ << std::endl; // wrong

  input_stream.close();
}

更新:添加了工作实施

std::ifstream input_stream(this->file_path_, std::ifstream::binary);

if (input_stream) {
  input_stream.seekg(0, input_stream.end);
  this->length_ = input_stream.tellg();
  input_stream.seekg(0, input_stream.beg);

  std::shared_ptr<char> buffer((char *)malloc(sizeof(this->length_)), free);

  std::cout << this->length_ << std::endl; // correct

  input_stream.read(buffer.get(), this->length_);

  std::cout << this->length_ << std::endl; // correct

  input_stream.close();
}

我能够使用上面的代码得到一些东西,但它仍然不是我需要的东西。我无法使用uint8_t data_成员。我相信这是一个单独的问题。

1 个答案:

答案 0 :(得分:1)

这表明未定义的行为。

您正在使用大小小于input_stream.read的缓冲区调用this->length 确保缓冲区足够大以容纳length个字符。

你写过缓冲区的末尾,将你的对象转换成垃圾(一个结果是这个调用后length不正确)