【发布时间】:2010-02-17 16:44:06
【问题描述】:
我正在使用 Linux 和 C++。我有一个大小为 210732 字节的二进制文件,但使用 seekg/tellg 报告的大小为 210728。
我从 ls-la 得到以下信息,即 210732 字节:
-rw-rw-r-- 1 pjs pjs 210732 Feb 17 10:25 output.osr
使用以下代码 sn-p,我得到 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 个字节。我已经用十六进制编辑器确认文件的大小是正确的。那么为什么我没有得到正确的尺寸呢?
我的回答:我认为问题是由于文件中有多个打开的 fstreams 引起的。至少这似乎已经为我解决了。感谢所有提供帮助的人。
【问题讨论】:
-
所有文件系统都是这种情况(如果您有多个)?
-
很遗憾,我无法在不同的文件系统上进行测试。
-
在我的 32 位 Ubuntu 系统上运行良好。你用g++吗?
-
我用的是g++ 4.1.2,系统是64位CentOS。
-
我刚刚在带有 g++ 4.4.2 的 32 位 ArchLinux 系统上尝试过,它也给出了错误的答案。