作者walker2009 (谁人未尝自以为)
看板C_and_CPP
标题[问题] 请问c++如何计算档案长度??
时间Tue Mar 3 19:50:45 2009
我是使用以下的code
ifstream in( input_file_name, ios::binary );
char c;
int count=0;
while( (c=in.get())!=EOF ) count++;
在以前都可以正确读出档案共有多少bytes
但是今天我读了一个 256*256 的 raw 图档
用以上程式码却怎麽读都只能读到 第17000个 bytes 左右
後来强制抓 256*256 是可以抓到完整档案没问题
我再下去比对每个 bytes 发现整个档案共有 8 个 EOF 字元
想请问这是 raw 图档的问题吗@@?
还是我 coding 方式有问题呢~
另外想请问是不是有函式可以直接帮忙算出档案长度呢??(已爬文未找到)
谢谢!!^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.199.90
1F:推 Fenikso:改成int c; 03/03 19:52
2F:→ walker2009:@@? c 是用来存放每次抓到的 char 内容 03/03 19:54
3F:→ walker2009:改成 int 的话可以正常运作吗 @@? 03/03 19:54
4F:→ walker2009:计算档案长度的变数是 int count ! 03/03 19:55
5F:推 oxoxoxox:使用 seekg(0,ios::end) 与 tellg() 组合 03/03 19:55
6F:→ walker2009:感谢楼上大大, 我马上查一下用法! 03/03 19:56
7F:推 Fenikso:对 c要改成int, 因为EOF是char范围外的第257个值 03/03 20:00
8F:→ walker2009:谢谢楼上大大, 我马上试试看 03/03 20:01
9F:→ walker2009:那想另外请问,为什麽第257个值char c还能保存并抓到呢? 03/03 20:02
10F:→ walker2009:因为我是抓了每一个byte之後放到c里判断 03/03 20:02
11F:→ walker2009:if(c==EOF) eofnumber++; 03/03 20:02
12F:→ walker2009:256*256的档案抓完以後才发现共有8个EOF 03/03 20:03
13F:→ realmeat:因为EOF值是 -1(255) 对raw不能这样处理 03/03 20:05
14F:→ realmeat:原本的code 应该是写来处理文字的, 二进位档都会出问题 03/03 20:06
15F:→ walker2009:c改成int 及 seekg.tellg 组合都可以!!!感谢各位大大!! 03/03 20:07
16F:→ walker2009:c_and_cpp版果然高手如林!!!!真的感恩~~ 03/03 20:07
17F:推 godman362:用fread的话,可以用fseek加ftell和o大的差不多意思 03/03 20:56
18F:→ walker2009:感恩感恩^^又学到一招 03/03 21:23