C語言基礎知識整理20檔案型別及檔案開啟和關閉

2021-09-10 21:43:36 字數 3279 閱讀 1760

檔案型別指標(簡稱檔案指標):每個被使用的檔案都在記憶體中開闢乙個相應的檔案資訊區,用來存放檔案的有關資訊(檔名,檔案狀態及檔案當前位置等)。這些資訊是儲存在乙個結構體變數中的。該結構體型別是由系統宣告的,取名為file。

例如有一種c編譯環境提供的stdio.h標頭檔案中有以下的檔案型別宣告:

typedef struct

file;//file等價於結構體

不同c編譯系統的file型別包含內容不完全相同,但大同小異。

宣告file的資訊在stdio.h中,在程式中可直接用file型別名定義變數。

如file f1;      //定義f1來存放乙個檔案的有關資訊

//這些資訊是在開啟檔案時由系統根據檔案的情況自動放入的,使用者不必過問

//一般不對file型別變數命名,也就是不通過變數的名字來引用這些變數,而是設定乙個指向file型別變數的指標變數,然後通過它來引用這些file型別變數。這樣使用起來方便。

file *fp;          //定義fp是乙個指向file型別資料的指標變數。

//可以使fp指向某乙個檔案的檔案資訊區(是乙個結構體變數),通過該檔案資訊區中的資訊就能夠訪問該檔案。即通過檔案指標變數能夠找到與它關聯的檔案。若有n個檔案,應設n個指標變數,分別指向n個file型別變數,以實現對n個檔案的訪問。

為方便起見,通常將這種指向檔案資訊區的指標變數簡稱為指向檔案的指標變數。

注意:指向檔案的指標變數並不是指向外部介質上的資料檔案的開頭,而是指向記憶體中的檔案資訊區的開頭。

對檔案讀寫之前應該「開啟」該檔案。實際上,所謂「開啟」是指為檔案建立相應的資訊區(用來存放有關檔案的資訊)和檔案緩衝區(用來暫時存放輸入輸出的資料)。

在編寫程式時,在開啟檔案的同時,一般都指定乙個指標變數指向該檔案,也就是建立起指標變數與檔案之間的聯絡,這樣,就可以通過該指標變數對檔案進行讀寫了。所謂「關閉」是指撤銷檔案資訊區和檔案緩衝區,使檔案指標變數不再指向該檔案,顯然就無法進行對檔案的讀寫了。

ansi c規定了用標準輸入輸出函式fopen來實現開啟檔案。

fopen函式的呼叫方式為:

fopen(檔名,使用檔案方式);      

//開啟檔案函式,返回值是指向檔案的指標,通常將其賦給乙個指向檔案的指標變數。

//開啟檔案需要告知編譯系統3個資訊:

//1.開啟檔案的名字;2.使用檔案的方式;3.要賦予哪個指標。

使用檔案方式

檔案使用方式

含義如果指定的檔案不存在

「r」(唯讀)

為了輸入資料,開啟乙個已存在的文字檔案

出錯「w」(只寫)

為了輸出資料,開啟乙個文字檔案

建立新檔案

「a」(追加)

向文字檔案尾新增資料

出錯「rb」(唯讀)

為了輸入資料,開啟乙個二進位制檔案

出錯「wb」(只寫)

為了輸出資料,開啟乙個二進位制檔案

建立新檔案

「ab」(追加)

向二進位制檔案尾新增資料

出錯「r+」(讀寫)

為了讀和寫,開啟乙個文字檔案

出錯「w+」(讀寫)

為了讀和寫,建立乙個新的文字檔案

建立新檔案

「a+」(讀寫)

為了讀和寫,開啟乙個文字檔案

出錯「rb+」(讀寫)

為了讀和寫,開啟乙個二進位制檔案

出錯「wb+」(讀寫)

為了讀和寫,建立乙個新的二進位制檔案

建立新檔案

「ab+」(讀寫)

為讀寫開啟乙個二進位制檔案

出錯用「r」方式開啟的檔案只能用於向計算機輸入資料,而且該檔案應該已經存在,並存有資料,這樣程式才能從檔案中讀資料。

用「w」方式開啟的檔案只能用於向該檔案寫資料(即輸出檔案)。若不存在該檔案,則在開啟檔案前新建乙個以指定的名字命名的檔案。如果原來已存在乙個以該檔名命名的檔案,則在開啟檔案前先將該檔案刪去,然後重新建立新檔案。

如果希望向檔案末尾新增新的資料(不希望刪除原有資料),則應該用「a」方式開啟。開啟檔案時,檔案讀寫位置標記移到檔案末尾。//在每個資料檔案中自動設定了乙個隱式的「檔案讀寫位置標記」,它指向的位置就是當前進行讀寫的位置。

用「r+」、「w+」、「a+」方式開啟的檔案即可用來輸入資料,也可用來輸出資料。用「r+」方式時該檔案應該已經存在,以便計算機從中讀資料。用「w+」方式則新建立乙個檔案,先向此檔案寫資料,然後可以讀此檔案中的資料。用「a+」方式開啟的檔案,原來的檔案不被刪去,檔案讀寫位置標記移到檔案末尾,可以新增,也可以讀。

如果不能實現「開啟」的任務,fopen函式將會帶回乙個出錯資訊。出錯原因可能是:「r」開啟不存在檔案;磁碟故障;磁碟已滿等。此時fopen函式將帶回乙個空指標值null(在stdio.h標頭檔案中,null已被定義為0)。

常用下面的方式開啟乙個檔案:

if((fp=fopen(「file1」,「r」))= =null)//先檢查。開啟檔案的操作是否出錯

//待使用者檢查出錯誤,修改後重新執行

c標準建議用上表列出的檔案使用方式開啟檔案,但有些c編譯不完全提供所有功能。

計算機從ascii

檔案讀入字元時,遇到回車換行符,系統把它轉換為乙個換行符,在輸出時把換行符轉換成為回車和換行兩個字元。在用二進位制檔案時,不進行這種轉換,在記憶體中的資料形式與輸出到外部檔案中的資料形式完全一致,一一對應。

程式中可以使用3個標準的流檔案——標準輸入流、標準輸出流、標準出錯輸出流。系統已對這3個檔案指定了與終端的對應關係。標準輸入流是從終端的輸入,標準輸出流是向終端的輸出,標準出錯輸出流是當程式出錯時將出錯資訊傳送到終端。

程式開始執行時系統自動開啟這3個標準流檔案。因此程式編寫者不需要在程式中用fopen函式開啟它們。所以以前我們用到的從終端輸入或輸出到終端都不需要開啟終端檔案。系統定義了3個檔案指標變數stdin

,stdout

和stderr

,分別指向標準輸入流、標準輸出流和標準出錯輸出流,可以通過這3個指標變數對以上3種流進行操作,它們都以終端作為輸入輸出物件。如果程式中指定要從stdin所指的檔案輸入資料,就是指從終端鍵盤輸入資料。

在使用完乙個檔案後應該關閉它,以防止它再被誤用。

fclose函式的呼叫形式為:

fclose(檔案指標);

//關閉檔案,函式帶回乙個值,當成功執行關閉操作,返回值為0,否則返回eof(-1)

//若不關閉檔案將會丟失資料。因為,在向檔案寫資料時候,是先將資料輸出到緩衝區,待緩衝區充滿才正式輸出給檔案。若緩衝區未滿關閉檔案,則可能造成資料丟失。因此要用fclose關閉檔案,先把緩衝區中的資料輸出到磁碟檔案,然後才撤銷檔案資訊區。有的編譯系統在程式結束前會自動先將緩衝區中的資料寫到檔案,從而避免此問題,但還是應該養成在程式終止之前關閉所有檔案的習慣。

linux基礎學習 9 2 檔案型別

f file 普通檔案 d directory 目錄 1 f file 普通檔案 1 二進位制檔案 命令 2 資料檔案 data 只能通過指定的命令進行檢視 3 文字檔案 root oldboyedu42 lnb ls l etc hosts bin gawk tmp etc.tar.gz rwxr...

Python基礎知識(六) 檔案

python內建函式open 用於開啟檔案和建立檔案物件,檔案物件包括方法和屬性。語法 file object open file,mode r buffering 1,encoding none,errors none,newline none,closefd true,opener none 模...

C語言基礎知識整理

一 關於sizeof和strlen。sizeof 用於計算某型別或者某變數在記憶體中所佔空間。比如整數分為short型,int型,long整型,分別佔2,2 4,4個位元組,int型具體占用幾個位元組和編譯系統有關。我們輸入字串時通常用char陣列 char s 10 scanf s s 輸入的字串...