[問題] 問一個binary檔案fread fwrite的問題

看板C_and_CPP (C/C++)作者 (累)時間16年前 (2009/02/08 18:15), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
現有一個原始檔案 A, 檔案約1M大 內容大概長這樣 9D 22 22 02 20 AD 02 00 EE 22 22 02 20 C7 02 1C B2 22 22 02 21 83 02 20 78 22 22 02 21 97 02 1F E1 22 32 02 21 AB 02 20 FA 22 22 02 21 BF 02 00 現在我要做的是要把原始檔案A 的頭尾取出來 中間都填入FF 頭尾大小不一定 有可能頭佔16K 尾也佔16K 給使用者自己輸入(start和length) 然後寫到一個新的檔案B裡 我現在寫到 while((fread(&tmp,sizeof(char),1,ptr))==1) { fwrite(&tmp,sizeof(char),1,ptr2); 這樣可以完整的複製整個檔案A到檔案B, 且內容是對的 但是我不知道怎麼只取一小部分= = 所以我把迴圈改掉試試, 改成 for(t=0; t<=50; t++) { fread(&tmp,sizeof(char),1,ptr); fwrite(&tmp,sizeof(char),1,ptr2); 這樣可以只印出前50個值, 我printf tmp在螢幕上也是對的 可是寫到檔案B卻變錯的, 用UltraEdit打開卻出現錯誤訊息: 檔案可能不是Dos格式,要轉換成Dos格式嗎? 打開檔案裡面是亂碼 ,像是 t ? 4 '' pÜ雘Z艞tꔠ 這樣, 好像存成char 請問1.若是不用forloop去做,還有別的方法可以讓迴圈停下而且存到檔案B內容是對的嗎? 2.我這樣做方向對嗎?因為沒做過Binary檔案的處理,所以不知道是不是有更好的方法 -- | ( 〒_〒) 嗚嗚嗚~ (∩∩)________ ╱ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.207.116 ※ 編輯: lulovepig 來自: 61.224.207.116 (02/08 19:08)

02/08 19:16, , 1F
1.先求出src file size 2.fread+fwrite 一次就OK
02/08 19:16, 1F

02/08 19:18, , 2F
src file是1M 我用fread+fwrite只能從頭複製到尾耶
02/08 19:18, 2F

02/08 19:19, , 3F
是我參數下的不對嗎?
02/08 19:19, 3F
文章代碼(AID): #19Zh3I7T (C_and_CPP)
文章代碼(AID): #19Zh3I7T (C_and_CPP)