fopen在a模式下,fseek無效

問題起因:

 之前代碼中要把數據寫入文件,存在數據更新的情況,原來用的都是unix的read和write函數,更新就使用lseek。爲了提高寫的效率,打算替換爲標準C的fwrite和fseek。由於 fopen的a模式下帶有文件不存在自動創建的功能就使用了a模式打開文件,然後在更新的情況下fseek移動文件指針,結果最後發現數據全部被寫入了,沒有被更新。

理論解釋:

https://zh.cppreference.com/w/c/io/fopen  參照該連接的解釋:

附加文件訪問模式下,數據被寫入到文件尾,而不考慮文件位置指示器的當前位置

也就是說a模式下,fseek是沒有用的。數據會被寫入文件尾。

問題解決:

增加了if判斷,如果文件存在,就選擇  "r+", 

不存在就選擇  "w" 模式

然後再使用fseek即可

 

發佈了29 篇原創文章 · 獲贊 24 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章