帶你了解C語言檔案的基本操作

2021-10-07 23:27:37 字數 4715 閱讀 9980

檔案操作和鍊錶綜合應用

我們都知道我們原來鍊錶的那些資料都是存與棧區的,當程式結束後,這些資料全部都會消失,那麼我要是想把這些檔案儲存下來,就是儲存到我們的磁碟中,應該如何用處理呢?這時候我們就需要對檔案進行操作了,不過我們首先要注意到的就是,磁碟的讀取速度太慢了,遠遠小於我們記憶體執行的速度,所以我們都是將磁碟的檔案一次性的讀取到鍊錶中,等程式結束後,把鍊錶的資料在寫回到檔案中。

ascii檔案便於對字元進行逐個處理,也便於輸出字元。但一般佔儲存空間較多,而且要花費轉換時間。

二進位制檔案可以節省外存空間和轉換時間,但乙個位元組並不對應乙個字元,不能直接輸出字元形式。

緩衝檔案系統:系統自動地在記憶體區為每乙個正在使用的檔案開闢乙個緩衝區。用緩衝檔案系統進行的輸入輸出又稱為高階磁碟輸入輸出。

非緩衝檔案系統:系統不自動開闢確定大小的緩衝區,而由程式為每個檔案設定緩衝區。用非緩衝檔案系統進行的輸入輸出又稱為低階輸入輸出系統。

在c語言中有乙個特殊的指標,這個指標是已經幫我定義好了的,在stdio的標頭檔案中,定義了乙個file的檔案指標。在緩衝檔案系統中,每個被使用的檔案都要在記憶體中開闢一file型別的區,存放檔案的有關資訊。

file指標的宣告:file *fp;這是乙個檔案指標。變數名是fp,型別是file。檔案指標指向乙個結構,該結構包含以下資訊:檔名、檔案的當前位置、檔案是否正在讀或寫、是否出錯或是否到達檔案末尾。

使用檔案的方式

指令的作用

「r」(唯讀)為輸入,開啟乙個文字檔案

「w」(只寫)為輸出,開啟乙個文字檔案

「a」(追加)向文字,檔案尾增加資料

「rb」

(唯讀)為輸入,開啟乙個二進位制檔案

「wb」

(只寫)為輸出,開啟乙個二進位制檔案

「ab」

(追加)向二進位制檔案尾增加資料

"r+「

(讀寫)為讀/寫開啟乙個文字檔案

"w+」

(讀寫)為讀/寫建立乙個新的文字檔案

"w+」

(讀寫)為讀/寫建立乙個新的文字檔案

「a+」

(讀寫)為讀/寫開啟乙個文字檔案(追加)

"rb+「

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

「wb+「

(讀寫)為讀/寫建立乙個新的二進位制檔案

「ab+」

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

這裡我們主要來分析一下「r+」和「w+」(或者「rb+」和「wb+」)的區別:

「r+」(「rb+」):他只能開啟存在的檔案,存在則開啟成功,不存在就會開啟失敗。

「w+」(「wb+」):這個命令如果檔案不存在就會新建乙個檔案並開啟,如果存在那麼它會建立乙個新的檔案同時覆蓋之前的檔案。

這個函式的函式功能是開啟指定的檔案。

我們來看看如何呼叫這個函式:

file *fp;

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

檔名:就是你要操作的檔案,如果直接寫檔名的話,那麼就是預設在當前目錄下開啟,如果加路徑那麼就是在你選擇的路徑下開啟。

使用檔案方式,有很多的命令,上面已經介紹。

這個函式是有返回值的,一般開啟成功就是返回這個檔案指標,如果開啟失敗會返回null。

含有就是檔名和使用檔案方式都是字串。

函式呼叫:

fclose(檔案指標);

函式功能:

使檔案指標變數不指向該檔案,也就是檔案指標變數與檔案「脫鉤」,此後不能再通過該指針對原來與其相聯絡的檔案進行讀寫操作

返回值:

關閉成功返回值為0;否則返回eof(-1)

函式原型:size_t fwrite(const void *buffer,size_t bytes, sizeo_t n,file *fp);

函式引數:buffer-要寫入資料的首位址,bytes-每份資料的大小,n-要寫入幾份資料,fp-要輸入的檔案指標。

函式返回值:成功時返回寫入的單元數,否則返回0

函式功能:fwrite是無格式寫函式,用於向檔案寫入整塊的資料。

例如我們把乙個使用者結構體的資料寫入檔案

user user=

int pf=0;

pf =

fwrite

(&user,

sizeof

(user),1

, fp)

;//fp是已經開啟的檔案

if(pf==0)

else

//這裡有乙個要注意的地方就是,我們寫入成功後,其實這個資料還並沒有真正寫入到檔案

//裡面,而是先存在了快取區,所以我們要重新整理一下快取區使用fflush函式

fflush

(pf)

;

函式原型:size_t fread(void *buffer, size_t bytes, sizeo_t n, file *fp);

函式引數:buffer-接收資料的首位址,bytes-每份資料的大小,n-要接收幾份資料,fp-要操作的檔案指標。

函式名返回值:成功時返回讀出的單元數,否則返回0

函式功能:fread是無格式讀函式,用於向檔案讀出整塊的資料。

例如我們把剛剛的使用者讀取出來

pf = fread (

&user,

sizeof

(user),1

, fp)

;//fp是已經開啟的檔案

if(pf==0)

else

我們使用讀取函式的時候要注意游標的位置,如果游標的位置在末尾那麼久讀取不到東西,所以為了我們能夠讀取到資料我們需要乙個可以定位游標的函式,下面就有介紹。

函式原型:void rewind(file * fp) ;

函式引數:fp-要操作的檔案指標

函式返回值:無

函式功能:將檔案的游標定位到檔案的頭部

例子:rewind(pf);

函式原型:int fseek (file *fp, long int offset, int origin);

函式引數:fp-要操作的檔案指標,offset-偏移量,origin-搜尋起始位置

函式返回值:無

函式功能:通過指定相對於開始位置、當前位置或流的末尾位置的偏移量來定位游標位置。

這個函式的第三個引數,只有三個變數,這三個變數是庫裡面有對應的巨集定義,seek_set 或 0(檔案開始),seek_cur 或 1(當前檔案指標位置),seek_end 或 2(檔案末尾)。這個偏移量是可正可負的(正向後偏移,負向前偏移),一般如果在檔案頭那麼這個偏移量為正,在尾部則為負,中間就隨便了。

函式原型:long int ftell(file *pf);

函式引數:pf-要操作的檔案

函式返回值:返回位元組數

函式功能:獲取當前檔案指標離檔案開頭的位元組數

例子:

long

int nlength=0;

fseek

(fp,

sizeof

(user)

,seek_end);

//偏移到檔案尾部

nlength =

ftell

(fp)

;//獲取當前檔案指標離檔案開頭的位元組數

printf

(「the file length is %d\n」, nlength)

;

思路分析:我們一般都把資料儲存於檔案中,那在程式執行的時候我們就需要把這個資料都儲存進來,那麼我們就需要先定義乙個鍊錶(通用鍊錶)的頭,然後就是開空間儲存資料,在就是從檔案中讀取資料(讀取的資料也需要開空間來儲存它,開的空間多大?需要你自己定,所以需要乙個引數傳進來。),因為我們每次只能儲存乙個資料,所以我們需要乙個迴圈,來重複這個操作,知道檔案被讀取完畢。

例程:

list *

file_read

(file *fp,

int size)

//初始化

memset

(data,

'\0'

, size)

;//開始讀取資料

//移動到檔案頭

rewind

(fp)

;//然後迴圈讀取資料並開空間儲存資料

while

(fread

(data, size,

1, fp)

)//初始化

memset

(data,

'\0'

, size);}

return head;

}//list是乙個定義好的結構體

思路分析:我們先將檔案的游標移動到檔案末尾,檔案移動到末尾用fseek函式,然後在寫入資料,寫入資料用fwrite函式,最後記得重新整理一下。

例程:

void

file_add

(file *fp,

void

*data,

int size)

思路分析:我們要檔案的游標移動到頭或者末尾都行(建議從頭),然後通過偏移找到要修改資料的位置,然後就是重新寫入相應大小的資料,最後記得重新整理資料區。這裡的偏移量要注意記得減一。

void

file_update

(file *fp,

void

*data,

int size,

int index)

}

了解C 檔案操作

using system using system.collections.generic using system.io using system.linq using system.text namespace fileoperate 要寫入的資訊 write方法只能寫入byte陣列 關閉檔案流...

C語言檔案操作基本常識

由於程式中經常有大量對檔案的輸入輸出操作,它經常構成了程式的主要部分,因而c語言提供了很多輸入輸出的函式,它們分別用於兩種型別檔案輸入輸出系統 即由ansi標準定義的緩衝檔案 也稱標準檔案 流 輸入輸出 i o 系統 另一類是ansi標準中沒有定義的非緩衝檔案 也稱非標準檔案 流 輸入輸出 i o ...

C 檔案的基本操作

c 檔案的基本操作 c 語言將檔案看成無結構的位元組流,根據檔案資料的編碼方式不同,分為文字檔案和二進位制檔案。根據訪問方式不同,分為順序訪問和隨機訪問方式。流庫的ifstream,ofstream,fstream類用於記憶體和檔案之間的資料交換。檔案的基本操作一般分為三個步驟 開啟檔案,讀寫檔案,...