[問題] 請問c++如何計算檔案長度??

看板C_and_CPP作者 (誰人未嘗自以為)時間15年前 (2009/03/03 19:50), 編輯推噓4(4014)
留言18則, 5人參與, 最新討論串1/1
我是使用以下的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

03/03 19:52, , 1F
改成int c;
03/03 19:52, 1F

03/03 19:54, , 2F
@@? c 是用來存放每次抓到的 char 內容
03/03 19:54, 2F

03/03 19:54, , 3F
改成 int 的話可以正常運作嗎 @@?
03/03 19:54, 3F

03/03 19:55, , 4F
計算檔案長度的變數是 int count !
03/03 19:55, 4F

03/03 19:55, , 5F
使用 seekg(0,ios::end) 與 tellg() 組合
03/03 19:55, 5F

03/03 19:56, , 6F
感謝樓上大大, 我馬上查一下用法!
03/03 19:56, 6F

03/03 20:00, , 7F
對 c要改成int, 因為EOF是char範圍外的第257個值
03/03 20:00, 7F

03/03 20:01, , 8F
謝謝樓上大大, 我馬上試試看
03/03 20:01, 8F

03/03 20:02, , 9F
那想另外請問,為什麼第257個值char c還能保存並抓到呢?
03/03 20:02, 9F

03/03 20:02, , 10F
因為我是抓了每一個byte之後放到c裡判斷
03/03 20:02, 10F

03/03 20:02, , 11F
if(c==EOF) eofnumber++;
03/03 20:02, 11F

03/03 20:03, , 12F
256*256的檔案抓完以後才發現共有8個EOF
03/03 20:03, 12F

03/03 20:05, , 13F
因為EOF值是 -1(255) 對raw不能這樣處理
03/03 20:05, 13F

03/03 20:06, , 14F
原本的code 應該是寫來處理文字的, 二進位檔都會出問題
03/03 20:06, 14F

03/03 20:07, , 15F
c改成int 及 seekg.tellg 組合都可以!!!感謝各位大大!!
03/03 20:07, 15F

03/03 20:07, , 16F
c_and_cpp版果然高手如林!!!!真的感恩~~
03/03 20:07, 16F

03/03 20:56, , 17F
用fread的話,可以用fseek加ftell和o大的差不多意思
03/03 20:56, 17F

03/03 21:23, , 18F
感恩感恩^^又學到一招
03/03 21:23, 18F
文章代碼(AID): #19hHcM-s (C_and_CPP)