一尘不染

C ++:获取不正确的文件大小

linux

我正在使用Linux和C ++。我有一个大小为210732字节的二进制文件,但是seekg / tellg报告的大小为210728。

我从ls-la获得以下信息,即210732字节:

-rw-rw-r– 1个pjs pjs 210732 2月17日10:25 output.osr

并使用以下代码段,我得到210728:

std::ifstream handle;
handle.open("output.osr", std::ios::binary | std::ios::in);
handle.seekg(0, std::ios::end);
std::cout << "file size:" << static_cast<unsigned int>(handle.tellg()) << std::endl;

所以我的代码关闭了4个字节。我已经确认使用十六进制编辑器可以正确处理文件大小。那么,为什么我没有得到正确的尺寸?

我的回答:我认为问题是由文件中有多个打开的fstream引起的。 至少这似乎已经为我解决了。感谢所有提供帮助的人。


阅读 269

收藏
2020-06-07

共1个答案

一尘不染

至少对于在64位CentOS 5上使用G ++ 4.1和4.4的用户而言,以下代码可以按预期工作,即,程序输出的长度与stat()调用返回的长度相同。

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  int length;

  ifstream is;
  is.open ("test.txt", ios::binary | std::ios::in);

  // get length of file:
  is.seekg (0, ios::end);
  length = is.tellg();
  is.seekg (0, ios::beg);

  cout << "Length: " << length << "\nThe following should be zero: " 
       << is.tellg() << "\n";

  return 0;
}
2020-06-07