(文章目錄)
前言
檔案操作重要嗎?
- 當然重要,如果你想讓你的程式擁有記憶功能,那就需要把要記憶的資訊和資料存入到一個外部檔案裡,以便下次提取。
一、檔案是什麼?
磁盤上的檔案是檔案。但在程式設計中,我們一般談的檔案有兩種:程式檔案、資料檔案
- 程式檔案:包括源程式檔案(字尾 .c),目标檔案(字尾 .obj)可執行程式(windows環境字尾為 .exe)。
- 資料檔案:檔案的内容不一定是程式,而是程式運作時讀寫的資料,比如程式運作需要從中讀取資料的檔案,或則輸出内容的檔案。
本章讨論的是資料檔案。
在以前我們VS編譯器上所處理的資料的輸入和輸出都是以終端為對象的,即從終端的鍵盤上輸入輸入資料,運作結果顯示到顯示器上。但在有時候我們會把資料輸出到磁盤上,在需要的時候再從磁盤上把資料讀取到記憶體中使用,這裡就是處理的磁盤上的檔案。
檔案包含三部分:檔案路勁+檔案名主幹+檔案字尾
例如:c:\code\test.txt
二、檔案類型:
根據資料的組織形式資料檔案被稱為文本檔案和二進制檔案
- ASCII檔案也稱為文本檔案,這種檔案在磁盤中存放時每個字元對應一個位元組,用于存放對應的ASCII碼
- 資料在記憶體中以二進制的形式存儲,如果不加轉換的輸出到外層,就是二進制檔案
例如,數1000的存儲形式為:
ASCLL碼形式: 00110001 00110000 00110000 00110000 00110000 占5個位元組
二進制形式存儲:00000000 00000000 00100111 00010000 占4個位元組
三、檔案緩沖區
我們在學習C語言檔案操作時我們也要簡單的了解一下C語言的檔案緩沖區概念:
- 緩沖區(Buffer)又稱為緩存(Cache),是記憶體空間的一部分。也就是說,計算機在記憶體中預留了一定的存儲空間,用來暫時儲存輸入或輸出的資料,這部分預留的空間就叫做緩沖區(緩存)。
- 在程式資料區到磁盤之間有輸出緩沖區和輸入緩沖區,這些有興趣的可以去深入了解一下
緩沖區是為了讓低速的輸入輸出裝置和高速的使用者程式能夠協調工作,并降低輸入輸出裝置的讀寫次數。
四、檔案指針
緩沖檔案系中:關鍵的概念是“檔案類型指針”,簡稱**“檔案指針”**
每個被使用的檔案都在記憶體中開辟了一個相應的檔案資訊區,用來存放檔案的相關資訊(如:檔案的名字,狀态及檔案目前的位置等)。這些資訊儲存在一個結構體變量中的。該結構體變量是有系統申明的取名:FILE
在我使用的vs2013編譯器的頭檔案stdio.h有以下的檔案類型聲名:

不同c編譯器的FILE所包含的内容不完全相同,但是大同小異,
每當打開一個檔案的時候,系統會根據檔案的情況自動建立一個FILE結構的變量,并 填充其中的資訊。
一般都是通過一個***FILE的指針***來維護這個結構的變量。
FILE* pf;//檔案指針變量
定義pf是一個指向FILE類型資料的指針變量,可以使pf指向某個檔案的檔案資訊區(是一個結構體變量)。通過該檔案資訊區中的資訊就可以通路該檔案。也就是說,通過檔案指針變量能夠找到與它關聯的檔案
五、檔案的打開和關閉
檔案在讀寫之前應該先打開檔案,在使用結束之後應該關閉檔案
編寫程式時,在打開檔案的同時,都會傳回一個FILE的指針變量指向該檔案相當于建立了指針與檔案的關系。
- fopen 函數打開檔案,fclose 來關閉檔案
FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
打開檔案一般有兩種方式:
- 目前路勁下(相對路徑)打開檔案
- 絕對路徑打開
//以讀的方式打開
//目前路勁下(相對路徑)打開檔案test.txt
fopen("test.txt", "r");
//絕對路徑打開
fopen("E:\\C++file\\file\\test.txt", "r");
打開方式如下:
- "r"(隻讀) 為輸入打開一個已經存在的文本檔案
- "w"(隻寫) 為輸出打開一個文本檔案
- "a"(追加) 向檔案檔案尾添加資料
- "rb"(隻讀) 為輸入打開一個二進制檔案
- "wb"(隻寫) 為輸出打開一個二進制檔案
- "r+"(讀寫) 為讀寫打開一個文本檔案
- "w+"(讀寫) 為讀寫建立一個新的文本檔案
- "a+"(讀寫) 為讀寫打開一個文本檔案
- "rb+"(讀寫) 為讀寫打開一個二進制檔案
- "wb+"(讀寫) 為讀寫建立一個新的二進制檔案
- "ab+"(讀寫) 為讀寫打開一個二進制檔案
- 以讀的形式打開檔案檔案必須存在
- 以寫的形式打開的檔案,隻能向該檔案輸入資料,如果所打開的檔案不存在,則在打開時建立一個以指定的名字命名的檔案;如果指定檔案存在,則在打開時将該檔案删去,然後建立一個新的檔案;