看板 C_and_CPP 關於我們 聯絡資訊
今天寫檔發現一個問題... 譬如我要對一檔案重複寫兩次, 第一次寫了 120 Byte 在第二次開始前我先使用 rewind讓pointer回到檔頭, 然後 在在寫100Byte... 那現在我再用 fclose將檔案關閉,, 請問這個檔案會多出後面的20Byte嗎? 有甚麼方法能夠在寫第二次前先將檔案的size歸零再繼續寫嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.127.201.105
ledia:ftruncate ? 10/28 22:47
ftruncate我試過, 可是他第一個參數是要 int fd, 我使用fopne產生的事一個 FILE *, 這樣子應該是不能使用此API吧?
bill42362:"w+" ? 10/28 22:48
POSIX:看一下fopen() 的mode 那邊的設定 10/28 22:51
請問意思是說寫第二次時, 在使用 fopen("", "w"); 一次嗎? 因為這是在Embedded上跑的, cpu只有300Mhz因此會擔心效能問題 所以想問有沒有更好的方法, 謝謝! ※ 編輯: pilipalabon 來自: 59.127.201.105 (10/28 23:15) ※ 編輯: pilipalabon 來自: 59.127.201.105 (10/28 23:17)
plover:效能差多少? 先對最後再optimization 10/28 23:35
Knighter:aw+ 10/29 08:09
ledia:參考 fileno 和 ftruncate 10/29 08:12
請問ftruncate的用法可以 ftruncate(fd, 0) 把檔案先恢復到跟一開始fopen一樣,然後再使用 fwrite寫檔, 這樣子可以嗎? 因為看man好像是說 ftruncate 所指定的size後都會被當垃圾, 所以會造成之後 fwrite所寫的資料都是無效的嗎? 另外上面有建議說在使用fopen一次,請問可以不fclose就 fopen嗎? 謝謝 ※ 編輯: pilipalabon 來自: 59.127.197.35 (10/29 09:15) ※ 編輯: pilipalabon 來自: 59.127.197.35 (10/29 09:23)