手把手教會你C語言檔案操作(3)

2021-10-18 10:45:11 字數 2854 閱讀 2322

如題所說,這篇博文就來聊聊檔案的寫入,也就是將資料從程式中儲存至指定檔案當中。

手把手教會你c語言檔案操作(1)

手把手教會你c語言檔案操作(2)

檔案操作相關函式

好吧,我也知道沒啥人看我的寫的部落格,就不自取其辱了,直接進入正題吧。

首先要明確一下這個操作許可權指的是什麼。它是指我們用fopen開啟某個檔案時所指定的第二引數。

關於這個第二引數在講fopen時並沒有多說,只是簡單地指定了乙個唯讀許可權,當然,在沒有涉及到檔案寫入的操作時,這個唯讀許可權完全足夠,但到了就要注意一下了。

開啟方式

說明「r」

以「唯讀」方式開啟檔案。只允許讀取,不允許寫入。檔案必須存在,否則開啟失敗。

「w」以「寫入」方式開啟檔案。如果檔案不存在,那麼建立乙個新檔案;如果檔案存在,那麼清空檔案內容(相當於刪除原檔案,再建立乙個新檔案)。

「a」以「追加」方式開啟檔案。如果檔案不存在,那麼建立乙個新檔案;如果檔案存在,那麼將寫入的資料追加到檔案的末尾(檔案原有的內容保留)。

「r+」

以「讀寫」方式開啟檔案。既可以讀取也可以寫入,也就是隨意更新檔案。檔案必須存在,否則開啟失敗。

「w+」

以「寫入/更新」方式開啟檔案,相當於w和r+疊加的效果。既可以讀取也可以寫入,也就是隨意更新檔案。如果檔案不存在,那麼建立乙個新檔案;如果檔案存在,那麼清空檔案內容(相當於刪除原檔案,再建立乙個新檔案)。

「a+」

以「追加/更新」方式開啟檔案,相當於a和r+疊加的效果。既可以讀取也可以寫入,也就是隨意更新檔案。如果檔案不存在,那麼建立乙個新檔案;如果檔案存在,那麼將寫入的資料追加到檔案的末尾(檔案原有的內容保留)。

「t」文字檔案。如果不寫,預設為"t"。

「b」以二進位制方式開啟檔案,可以與上面的許可權組合,如 rb 等。

上面的許可權及說明要牢記喲,記不住的話也要知道在**能夠找到它們哦。

還有就是,沒有直接能夠插入資料的許可權!!!

這麼說可能不好理解,舉個例子吧:

比如我有乙個字串:abcdefg

我想要在 c 後面插入 12 這個數字,我們想要的結果是這樣的:

abc12defg

可事實上我們如果先偏移檔案操作指標至 c 之後再寫入內容,得到的將會是:abc12fg

也就是說它是把原來那個位置上的內容給覆蓋掉了。

如果還執有疑惑的童鞋不要急,敢於質疑是乙個好習慣,不過我們先來看看寫入函式並掌握它的用法,再來驗證一番。

函式原型:

size_t

fwrite

(void

*ptr,

size_t size,

size_t count, file *fp)

; 資料** 每一塊多大 一共多少塊 寫到哪兒

@ptr: 臨時存放要寫入的內容的緩衝區

@size: 每次讀取的資料塊的大小

@count: 一共讀取多少塊資料

返回值:成功寫入的資料塊塊數( 0

<= 返回值 <= count )。

這個函式與 fread 函式引數基本一致,不做過多介紹,簡單說明一下第一引數,一般是乙個緩衝區,但他最好是有內容的,然後要注意這個緩衝區一般都是以字串形式存在,要注意你所寫的內容是否需要字串結束符\0

然後就是寫入時選擇的許可權問題,要考慮一下,若是檔案存在,我是想要清空裡面的內容呢,還是只是想要追加在原有檔案之後?

若是不想清空,就用 r+: 這個就是在原有基礎上覆蓋,在什麼位置寫入多少,這個檔案就改變多少。

若是不想清空,也不想修改原有資料,只是追加就用 a 或 a+ 。

若是清空則用 w 或 w+ 。

舉個例子,順便驗證一下在 1 中所提到的問題:

要寫入的目標檔案 a.txt 初始內容。

執行完畢之後:

這樣同樣也佐證了我上面所說 **沒有直接插入操作的許可權** 這一說法。

函式原型:

int

fprintf

(file *stream,

const

char

*format,...);

手把手教會你c語言檔案操作

上例項:

還是剛剛的 a.txt ,我們寫入乙個學生的簡單基本資訊

zahngsan m 25 csdn

#

include

intmain()

fclose

(fp)

;return0;

}

執行結果:

好啦,到這裡檔案操作就介紹完了,可能有同學會說我寫的太少了,攏共也就不超過 10 個函式就說講完了,別人都講了好多呢。

確實,剩下的函式,我並沒有說不要學,只是我覺得有這些就足夠你完成想要完成基本的檔案操作了,若是想要深入研究,可以先將我沒有講到的函式嘗試一遍,掌握用法,再去深入了解。

基礎已經講完,至於你能將他們玩的多花裡胡哨就看個人本事啦。

手把手教會你C語言檔案操作(1)

在c語言學習過程中,對於資料的儲存是無法避免的問題之一。我們學習了用陣列來儲存某一種型別資料,用結構體來儲存多種不同型別資料,但是這些都是程式中的容器,程式退出後這些資料也就隨之消失了。所以我們嘗試尋找一種方式,能夠將資料儲存與程式分離開來。在 linux 中有這麼一句話 一切皆檔案。所以我們嘗試將...

手把手教會你C語言檔案操作(2)

linux c 檔案操作 手把手教會你c語言檔案操作 1 2.檔案操作位置是否到達了文件末尾?1.1 偏移操作 說是說指標偏移,將其稱之為 尋找操作位置 也未嘗不可,也更加容易記住這個函式。為什麼這麼說呢,尋找 seek,不難猜出這個函式就是 fseek。來看看函式原型 int fseek file...

手把手入門C語言 列舉

列舉中的變數是遞增的 預設是0開始 首元素的值是0 include include 列舉中的變數是遞增的 預設是0開始 首元素的值是0 定義乙個列舉 enum weekday main 測試列舉中的變數是遞增的 修改下面的 monday 0,tuesday,wednesday,thursday,fr...