看板 C_and_CPP 關於我們 聯絡資訊
我是使用以下的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
Fenikso:改成int c; 03/03 19:52
walker2009:@@? c 是用來存放每次抓到的 char 內容 03/03 19:54
walker2009:改成 int 的話可以正常運作嗎 @@? 03/03 19:54
walker2009:計算檔案長度的變數是 int count ! 03/03 19:55
oxoxoxox:使用 seekg(0,ios::end) 與 tellg() 組合 03/03 19:55
walker2009:感謝樓上大大, 我馬上查一下用法! 03/03 19:56
Fenikso:對 c要改成int, 因為EOF是char範圍外的第257個值 03/03 20:00
walker2009:謝謝樓上大大, 我馬上試試看 03/03 20:01
walker2009:那想另外請問,為什麼第257個值char c還能保存並抓到呢? 03/03 20:02
walker2009:因為我是抓了每一個byte之後放到c裡判斷 03/03 20:02
walker2009:if(c==EOF) eofnumber++; 03/03 20:02
walker2009:256*256的檔案抓完以後才發現共有8個EOF 03/03 20:03
realmeat:因為EOF值是 -1(255) 對raw不能這樣處理 03/03 20:05
realmeat:原本的code 應該是寫來處理文字的, 二進位檔都會出問題 03/03 20:06
walker2009:c改成int 及 seekg.tellg 組合都可以!!!感謝各位大大!! 03/03 20:07
walker2009:c_and_cpp版果然高手如林!!!!真的感恩~~ 03/03 20:07
godman362:用fread的話,可以用fseek加ftell和o大的差不多意思 03/03 20:56
walker2009:感恩感恩^^又學到一招 03/03 21:23