個人主頁:平行線也會相交
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供蜀山網(wǎng)站建設(shè)、蜀山做網(wǎng)站、蜀山網(wǎng)站設(shè)計、蜀山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、蜀山企業(yè)網(wǎng)站模板建站服務(wù),十多年蜀山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
歡迎 點贊👍 收藏? 留言? 加關(guān)注💓本文由 平行線也會相交 原創(chuàng)
收錄于專欄【C/C++】
本文是為學(xué)習(xí)各種文件操作函數(shù)做一個小小鋪墊,讀者如果認(rèn)為對文件這方面的內(nèi)容掌握的還可以,可直接跳轉(zhuǎn)到我的下一篇文章來學(xué)習(xí)具體的文件操作函數(shù)👉C語言之文件操作
本文目錄磁盤的文件是文件
但在程序設(shè)計中,我們一般讀的文件分為兩種:程序文件、數(shù)據(jù)文件。程序文件是可以操作數(shù)據(jù)文件的
。
程序文件是操作我們的數(shù)據(jù)文件的。我們可以讀那個文件、可以寫那個文件、可以去編譯那個文件,即可以對那個文件進行相關(guān)的操作、編輯等等,這些文件呢就被稱為數(shù)據(jù)文件,為程序文件是可以操作我們的數(shù)據(jù)文件的。
數(shù)據(jù)文件包括源程序文件(后綴為
.c
)、目標(biāo)文件(windows
環(huán)境后綴為.obj
)、可執(zhí)行程序(windows
環(huán)境后綴為.exe
)。
文件的內(nèi)容不一定要程序,而是程序運行時讀寫的數(shù)據(jù),比如程序運行需要從中讀取數(shù)據(jù)的文件。
注意:本文討論的不是程序文件,而是我們可以被操作的數(shù)據(jù)文件。
(如何把信息放到數(shù)據(jù)文件中去,如何再從數(shù)據(jù)文件中把信息拿出來。)
在之前我們所處理數(shù)據(jù)的輸入輸出都是以終端為對象的,即從終端的鍵盤輸入數(shù)據(jù),運行結(jié)果顯示到顯示器上。其實我們有時候會把信息輸出到磁盤上,當(dāng)需要的時候再從磁盤上把信息讀取到內(nèi)存中使用,這里處理的就是磁盤上文件。
一個文件要有一個唯一的文件標(biāo)識。
文件名包括3部分:文件路徑+文件名主干+文件后綴
例如:c:\code\test.txt
即test為文件名主干
、.txt為文件后綴
、前面那部分就是文件路徑
。
為了方便起見,文件標(biāo)識常被稱為文件名。
根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件被稱為文本文件(文本文件里面放到就是ASICC碼代表的字符,我們在看的時候就是一堆亂碼
)或者二進制文件(放的是二進制形式的文件,即數(shù)據(jù)在內(nèi)存中是怎么存的,放到文件中就怎么存,不加任何的轉(zhuǎn)換
)。
數(shù)據(jù)在內(nèi)存中以二進制的形式存儲,如果不加轉(zhuǎn)換,把內(nèi)存中的數(shù)據(jù)直接輸出到外存中去(即把內(nèi)存中的數(shù)據(jù)直接輸出到文件中去,不加任何轉(zhuǎn)換放到硬盤,放到外存上去
),就是二進制文件。
如果要求在外存上以ASCII碼的形式存儲,則需要在存儲前轉(zhuǎn)換,(也就是說把內(nèi)存中的數(shù)據(jù)以ASCII碼值的形式存放到外存中去,即放到文件中去)以ASICC字符的形式存儲的文件就是文本文件。
一個數(shù)據(jù)在內(nèi)存中是怎么存儲的呢?字符一律以ASCII形式存儲,數(shù)值型數(shù)據(jù)可以用ASCII形式存儲,也可以使用二進制的形式存儲
。
如有整數(shù)10000,如果以ASCII碼的形式輸出到磁盤,則硬盤中占用5個字節(jié)(每個字符一個字節(jié)),而二進制形式輸出,則磁盤中占用5個字節(jié)(每個字符都是一個字節(jié)),而二進制形式輸出,則在磁盤上只占4個字節(jié)。
下面請看測試代碼:
#includeint main()
{int a = 10000;
FILE* pf = fopen("test.txt", 'wb');//w是write的意思,而b是以二進制的形式去寫這個文件
fwrite(&a, 4, 1, pf);//以二進制的形式寫到文件中
//&a即數(shù)據(jù)來自于a的地址處
//4即4個字節(jié)
//1即寫一個這樣的數(shù)據(jù)
//pf即放到pf維護的這個文件中去
fclose(pf);//關(guān)閉文件
pf = NULL;
return 0;
}
注意打開時要以二進制的形式打開
,即:
在test.txt
文件中我們可以看到是10000
是以16進制的形式
來展示的,同時為小端存儲
,所以在文件中是倒著存放的,其實真正在內(nèi)存中是以二進制的形式來展示的
。(注意是以二進制來進行存放的,但是要通過屏幕給我們展示出來就是以十六進制來進行展示的,即展示出來就轉(zhuǎn)換成了十六進制。)
而十六進制00 00 27 10
轉(zhuǎn)換為十進制之后就是10000
。
10000存到文件中去,即文本文件
,存成文本的形式就是這樣的:
ANSIC標(biāo)準(zhǔn)采用“緩沖文件系統(tǒng)”處理的數(shù)據(jù)文件的,所謂緩沖文件系統(tǒng)是指系統(tǒng)自動地為內(nèi)存中為程序中的每一個正在使用的文件開辟一塊“文件緩沖區(qū)”。從內(nèi)存向磁盤輸出數(shù)據(jù)會先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤上。如果從磁盤向計算機讀入數(shù)據(jù),則從磁盤文件中讀取數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)搜索你感到程序數(shù)據(jù)區(qū)(程序變量等)。緩沖區(qū)的大小根據(jù)C編譯系統(tǒng)決定的。
緩沖文件系統(tǒng)中,關(guān)鍵的概念是“文件類型指針”,簡稱“文件指針
”。
每個被使用的文件都在內(nèi)存中開辟了一個相應(yīng)的文件信息區(qū)
,用來存放文件的相關(guān)信息
(如文件的名字,文件狀態(tài)及文件當(dāng)前的位置,文件創(chuàng)建時間,文件大小等等)。這些信息是保存在一個結(jié)構(gòu)體變量中。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名FILE。
當(dāng)我們打開一個文件,寫文件或者讀文件的時候,其實任何一個文件,都會有這樣一個文件信息區(qū)和一個文件對應(yīng)起來。
不同的C編譯器的FILE類型包含的內(nèi)容不完全明白,但是大同小異。
每當(dāng)打開一個文件的時候,系統(tǒng)會根據(jù)文件的情況自動創(chuàng)建一個FILE結(jié)構(gòu)的變量,并填充其中的信息
,使用者不必關(guān)心細(xì)節(jié)。
一般都是通過一個FILE的指針來維護這個FILE結(jié)構(gòu)的變量,這樣使用起來更加方便。
下面我們可以創(chuàng)建一個FILE*的指針變量:
FILE* pf;//文件指針變量
定義pf是一個指向FILE類型數(shù)據(jù)的指針變量。可以使pf指向某個文件的文件信息區(qū)(是一個結(jié)構(gòu)體變量)。通過該文件信息區(qū)中的信息就能夠訪問該文件。也就是說,通過文件指針變量能夠找到與它關(guān)聯(lián)的文件。
比如:
當(dāng)文件在被讀取寫入的時候,文件的大小等等都會發(fā)生變化,甚至我們對這個文件進行重命名,而一旦發(fā)生變化,文件信息區(qū)里面的信息都會跟著發(fā)生變化,因為這個文件信息區(qū)是來標(biāo)識、維護該文件的,這些東西會隨著操作文件而會發(fā)生變化。
文件指針就是FILE
這樣一個結(jié)構(gòu)的指針。什么意思呢?就是我們每次打開或者維護文件時都會根據(jù)這個文件的相關(guān)信息創(chuàng)建一個和它對應(yīng)的文件信息區(qū),這個文件信息區(qū)對應(yīng)的類型就是FILE類型
,當(dāng)我們區(qū)維護的時候還需要去維護這個文件信息區(qū)。怎么維護呢?我們把這個文件信息區(qū)的地址拿出來并存起來,即存了一個FILE類型
的這樣一個地址,這個時候就需要FILE的一個結(jié)構(gòu)指針,這個指針就被稱為文件指針
。
**通過對以上內(nèi)容的學(xué)習(xí)之后我們就可以正式的學(xué)習(xí)文件,學(xué)習(xí)文件的相關(guān)操作了。感謝各位?。。?*😊
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧