來源:C語言文件操做 (freecplus.net)html
C 語言對文件進行操做以前必須先「打開」文件,操做(讀和寫)完成後,再「關閉」文件。linux
打開文件 --> 操做文件(文件讀寫)--> 關閉文件windows
一、文件操做函數
操做文件的時候,C語言爲文件分配一個信息區,該信息區包含文件描述信息,緩衝區位置、緩衝區大小、文件讀寫到的位置等基本信息,這些信息用一個結構體來存放(struct_IO_FILE),這個結構體有一個別名FILE(typedef struct_IO_FILE FILE), FILE結構體和對文件操做的庫函數在stdio.h頭文件中聲明。學習
typedef struct { short level; // 緩衝區「滿」或「空」的程度 unsigned flags; // 文件狀態標誌 char fd; // 文件描述符 unsigned char hold; // 如緩衝區無內容不讀取字符 short bsize; // 緩衝區的大小 unsigned char *buffer; // 數據緩衝區的位置 unsigned ar *curp; // 指針當前的指向 unsigned istemp; // 臨時文件指示器 short token; // 用於有效性檢查 }FILE;
1.1 打開文件的函數.net
fopen函數中會動態分配一個FILE結構體大小的內存空間,並把FILE結構體內存的地址做爲函數的返回值,程序中用FILE結構體指針存放這個地址。3d
fopen來建立一個新的文件或者打開一個已存的文件,調用fopen函數成功後,返回一個文件指針( FILE *),函數的原型以下:指針
FILE *fopen( const char * filename, const char * mode );
參數filename 是字符串,表示須要打開的文件名,能夠包含目錄名,若是不包含路徑就表示程序運行的當前目錄。實際開發中,採用文件的全路徑。htm
參數mode也是字符串,表示打開文件的方式(模式)。blog
返回值:打開成功,返回該文件對應的 FILE 類型的指針;打開失敗,返回 NULL。故需定義 FILE 類型的指針變量,保存該函數的返回值。可根據該函數的返回值判斷文件打開是否成功。
方式 |
含 義 |
說 明 |
r |
只讀 |
文件必須存在,不然打開失敗。 |
w |
只寫 |
若是文件存在,則清除原文件內容;若是文件不存在,則新建文件。 |
a |
追加只寫 |
若是文件存在,則打開文件,若是文件不存在,則新建文件。 |
r+ |
讀寫 |
文件必須存在。在只讀 r 的基礎上加 '+' 表示增長可寫的功能。 |
w+ |
讀寫 |
在只寫w的方式上增長可讀的功能。 |
a+ |
讀寫 |
在追加只寫a的方式上增長可讀的功能。 |
1.2 關閉文件的函數
fclose函數除了關閉文件,還會釋放FILE結構體佔用的內存空間。
函數的原型:
int fclose(FILE *fp);
fp爲fopen函數返回的文件指針。
/* * 程序名:12-02.c,此程序用於文件打開和關閉簡單操做 */ #include <stdio.h> int main(){ FILE *fp = 0; //定義存放文件指針的變量 fp = fopen("D:\\學習\\111.txt", "r"); if ( fp == 0 ) { printf("打開D:\學習\111.txt失敗;\n"); return -1; } printf("D:\學習\111.txt fp =%p \n", fp);//%p是打印地址的,打印文件的地址 fclose(fp) ; }
在windows 裏面寫路徑時候用用兩個反斜槓"//"或者正斜槓「/」來表示路徑,主要不能使用一個反斜槓"\"
windows是兩個反斜槓「\\」,也能夠使用正斜槓「/」
linux 用正斜槓「/」
注意事情:
1)調用fopen打開文件的時候,必定要判斷返回值,若是文件不存在、或沒有權限、或磁盤空間滿了,都有可能形成打開文件失敗。
2)文件指針是調用fopen的時候,系統動態分配了內存空間,函數返回或程序退出以前,必須用fclose關閉文件指針,釋放內存,不然後果嚴重。
3)若是文件指針是空指針或野指針,用fclose關閉它至關於操做空指針或野指針,後果嚴重。