加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:获取文件大小不正确

发布时间:2020-12-16 06:44:10 所属栏目:百科 来源:网络整理
导读:我正在使用 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;h
我正在使用 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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读