C語言文件操作詳情(一)
前言:
文件操作重要嗎?
當(dāng)然重要:如果我們想讓自己的程序擁有記憶功能,那就需要把要記憶的信息和數(shù)據(jù)存入到一個外部文件里,以便下次提取。
一、文件是什么
磁盤上的文件是文件。但在程序設(shè)計中,我們一般談的文件有兩種:程序文件、數(shù)據(jù)文件
- 程序文件:包括源程序文件(后綴 .c),目標(biāo)文件(后綴 .obj)可執(zhí)行程序(windows環(huán)境后綴為 .exe)。
- 數(shù)據(jù)文件:文件的內(nèi)容不一定是程序,而是程序運行時讀寫的數(shù)據(jù),比如程序運行需要從中讀取數(shù)據(jù)的文件,或則輸出內(nèi)容的文件。
VS編譯器上所處理的數(shù)據(jù)的輸入和輸出都是以終端為對象的,即從終端的鍵盤上輸入輸入數(shù)據(jù),運行結(jié)果顯示到顯示器上。但在有時候我們會把數(shù)據(jù)輸出到磁盤上,在需要的時候再從磁盤上把數(shù)據(jù)讀取到內(nèi)存中使用,這里就是處理的磁盤上的文件。
文件包含三部分:文件路勁+文件名主干+文件后綴
例如:c:\code\test.txt
二、文件類型
根據(jù)數(shù)據(jù)的組織形式數(shù)據(jù)文件被稱為文本文件和二進(jìn)制文件
- ASCII文件也稱為文本文件,這種文件在磁盤中存放時每個字符對應(yīng)一個字節(jié),用于存放對應(yīng)的ASCII碼
- 數(shù)據(jù)在內(nèi)存中以二進(jìn)制的形式存儲,如果不加轉(zhuǎn)換的輸出到外層,就是二進(jìn)制文件
例如,數(shù)1000的存儲形式為:
ASCLL碼形式: 00110001 00110000 00110000 00110000 00110000 占5個字節(jié)
二進(jìn)制形式存儲:00000000 00000000 00100111 00010000 占4個字節(jié)
三、文件緩沖區(qū)
我們在學(xué)習(xí)C語言文件操作時我們也要簡單的了解一下C語言的文件緩沖區(qū)概念:
- 緩沖區(qū)(
Buffer)又稱為緩存(Cache),是內(nèi)存空間的一部分。也就是說,計算機(jī)在內(nèi)存中預(yù)留了一定的存儲空間,用來暫時保存輸入或輸出的數(shù)據(jù),這部分預(yù)留的空間就叫做緩沖區(qū)(緩存)。 - 在程序數(shù)據(jù)區(qū)到磁盤之間有輸出緩沖區(qū)和輸入緩沖區(qū),這些有興趣的可以去深入了解一下
緩沖區(qū)是為了讓低速的輸入輸出設(shè)備和高速的用戶程序能夠協(xié)調(diào)工作,并降低輸入輸出設(shè)備的讀寫次數(shù)。
四、文件指針
緩沖文件系中:關(guān)鍵的概念是“文件類型指針”,簡稱**“文件指針”**
每個被使用的文件都在內(nèi)存中開辟了一個相應(yīng)的文件信息區(qū),用來存放文件的相關(guān)信息(如:文件的名字,狀態(tài)及文件當(dāng)前的位置等)。這些信息保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體變量是有系統(tǒng)申明的取名:FILE
在使用的vs2013編譯器的頭文件stdio.h有以下的文件類型聲名:

不同c編譯器的FILE所包含的內(nèi)容不完全相同,但是大同小異,
每當(dāng)打開一個文件的時候,系統(tǒng)會根據(jù)文件的情況自動創(chuàng)建一個FILE結(jié)構(gòu)的變量,并 填充其中的信息。
一般都是通過一個FILE的指針來維護(hù)這個結(jié)構(gòu)的變量。
FILE* pf;//文件指針變量
定義pf是一個指向FILE類型數(shù)據(jù)的指針變量,可以使pf指向某個文件的文件信息區(qū)(是一個結(jié)構(gòu)體變量)。通過該文件信息區(qū)中的信息就可以訪問該文件。也就是說,通過文件指針變量能夠找到與它關(guān)聯(lián)的文件

五、文件的打開和關(guān)閉
文件在讀寫之前應(yīng)該先打開文件,在使用結(jié)束之后應(yīng)該關(guān)閉文件
編寫程序時,在打開文件的同時,都會返回一個FILE的指針變量指向該文件相當(dāng)于建立了指針與文件的關(guān)系。
- fopen 函數(shù)打開文件,fclose 來關(guān)閉文件
FILE *fopen(const char *filename, const char *mode); int fclose(FILE *stream);
打開文件一般有兩種方式:
- 當(dāng)前路勁下(相對路徑)打開文件
- 絕對路徑打開
//以讀的方式打開
//當(dāng)前路勁下(相對路徑)打開文件test.txt
fopen("test.txt", "r");
//絕對路徑打開
fopen("E:\\C++file\\file\\test.txt", "r");
打開方式如下:
- “r”(只讀) 為輸入打開一個已經(jīng)存在的文本文件
- “w”(只寫) 為輸出打開一個文本文件
- “a”(追加) 向文件文件尾添加數(shù)據(jù)
- “rb”(只讀) 為輸入打開一個二進(jìn)制文件
- “wb”(只寫) 為輸出打開一個二進(jìn)制文件
- “r+”(讀寫) 為讀寫打開一個文本文件
- “w+”(讀寫) 為讀寫建立一個新的文本文件
- “a+”(讀寫) 為讀寫打開一個文本文件
- “rb+”(讀寫) 為讀寫打開一個二進(jìn)制文件
- “wb+”(讀寫) 為讀寫建立一個新的二進(jìn)制文件
- “ab+”(讀寫) 為讀寫打開一個二進(jìn)制文件
注意:
- 用 “r” 方式打開的文件,不能向其輸入數(shù)據(jù),并且該文件已存在,否則出錯;
- 用 “w” 方式打開的文件,只能向該文件輸入數(shù)據(jù),如果所打開的文件不存在,則在打開時新建一個以指定的名字命名的文件;如果指定文件存在,則在打開時將該文件刪去,然后新建一個新的文件;
- 如果函數(shù) fopen 打開文件出錯,則fopen返回一個空指針值 NULL;
- 在程序開始運行時,系統(tǒng)自動打開3個標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入(stdin),標(biāo)準(zhǔn)輸出(stdout),標(biāo)準(zhǔn)出錯輸 出(stderr)。如果要使用輸入輸出終端,則不需要打開,可以直接使用,如fputc(stdout,‘a’);向屏幕輸出字符a。

- 以讀的形式打開文件文件必須存在
- 以寫的形式打開的文件,只能向該文件輸入數(shù)據(jù),如果所打開的文件不存在,則在打開時新建一個以指定的名字命名的文件;如果指定文件存在,則在打開時將該文件刪去,然后新建一個新的文件;
到此這篇關(guān)于C語言文件操作詳情(一)的文章就介紹到這了,更多相關(guān)C語言文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析c#中如何在form的webbrowser控件中獲得鼠標(biāo)坐標(biāo)
以下是對c#中如何在form的webbrowser控件中獲得鼠標(biāo)坐標(biāo)的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07

