C語言:fopen模式比較

來源:互聯網
上載者:User

fopen 模式

屬     性

r

w

a

r+

w+

a+

檔案必須已存在

Y

N

N

Y

N

N

檔案內容將丟失

N

Y

N

N

Y

N

允許從流讀取(fread)

Y

N

N

Y

Y

Y

允許寫入到流(fwrite)

N

Y

Y

Y

Y

Y

從流的末尾寫入

N

N

Y

N

N

Y

任意定位(fseek)

Y

Y

Y

Y

Y

N

 

 

 

 

 

 

 

 

 

 

當操作的檔案的檔案是二進位檔案的時候,流的模式可以指定符中添加字母b進行表示,b可以出現在+號的之前或之後 例如:rb,wb,a+b,ab+

參考:《C語言參考手冊》 p284,p285

 

r+ ,w+,a+ 幾種模式解析

 

雖然r+,w+兩種模式都是可以進行進行讀寫操作,但是w+開啟檔案的時候會清除掉檔案內容,因此當需要對檔案內容進行隨機訪問和讀寫的時候,堅決的不能使用這種模式,以r+方式進行fwrite的時候只會覆蓋掉檔案的當前流位置之後的若干位元組

想象一個情境:如果檔案是一種小型資料庫,每一筆記錄都是一個等長資料區塊,因此對於資料的更新操作,就要支援隨機訪問,想要修改第3筆記錄的某個欄位值完全就可以算出位移量((3-1) * 定長資料的長度)然後fseek過去,直接fwrite,如果是w+的方式開啟,那麼將丟失檔案內容,此時的操作產生的影響:未知

a+模式從fopen模式表來看應該算是最強大的模式了,不過實際情況看起來是這個模式無法完成更新檔案的作用,無論如何使用fseek進行定位,這個檔案的流的起始位置始終在檔案末尾,也就是說它無法替代r+,w+這兩種模式

總結:如果要對檔案進行讀寫的話,盡量以r+方式開啟檔案,w+實在是一種危險的開啟檔案,而對於a+的應用情境我想它則只能用於追加資料,最強大最安全的方式還是r+

#include <stdio.h>
FILE *fp = fopen(filename,"r+");
assert(fp != NULL);
//assert會報錯,而w,a則不會


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.