作者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