我正在使用
Linux和C.我有一个大小为210732字节的二进制文件,但使用seekg / tellg报告的大小是210728.
我从ls-la获得以下信息,即210732字节:
-rw-rw-r– 1 pjs pjs 210732 Feb 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文件.至少这似乎已经为我整理了.感谢所有帮助的人.
解决方法
至少对于我在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; }