C語言總結9 C語言檔案操作

2021-10-22 13:49:54 字數 4586 閱讀 3221

磁碟上的檔案是檔案;檔案包含檔案內容和檔案屬性,都是資料,需要儲存;檔案分為程式檔案(源程式檔案、目標檔案、可執行程式檔案)和資料檔案

資料檔案分為文字檔案(以ascii碼的形式儲存)和二進位制檔案(以為二進位制的形式儲存)

1、從記憶體向磁碟輸入資料會先送到記憶體中的緩衝區,裝滿緩衝區之後才一起送到磁碟上(輸出);從磁碟上讀取資料輸入到記憶體緩衝區,充滿緩衝區之後,再從緩衝區逐個地將資料送到程式資料區(輸入)。

2、記憶體中三種緩衝方式

(1)無緩衝 直接顯示有資料輸出,提高效率

(2)行緩衝 以'\n'結尾或寫滿,重新整理到顯示器上

(3)全緩衝 把記憶體寫滿,統一重新整理

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

file* pf;//檔案指標變數

定義pf是乙個指向file型別資料的指標變數。可以使pf指向某個檔案的檔案資訊區,通過該檔案資訊區中的資訊就能夠訪問該檔案。

檔名:檔案路徑+檔案主幹+檔案字尾

例如:c:\use\test.txt

fopen函式開啟檔案 

file* fopen(const char* filename,const char* code);

第乙個引數為檔名,第二個引數為開啟檔案的方式;

開啟檔案成功,則返回檔案指標;開啟檔案失敗,則返回空指標null

fclose函式關閉檔案

int fclose(file* stream);

引數為檔案指標;

關閉成功時,返回0;關閉失敗時,返回乙個非零值

檔案的開啟方式:

「r」唯讀        為了輸入資料,開啟乙個已經存在的文字檔案;如果指定檔案不存在,則出錯

「w」只寫       為了輸入資料,開啟乙個文字檔案;如果存在同名檔案,則原內容會被清空;如果指定檔案不存在,則建立乙個新的檔案

「a」追加        向文字檔案尾新增資料;如果指定檔案不存在,則建立乙個

「rb」唯讀       為了輸入資料,開啟乙個已經存在的二進位制檔案;如果指定檔案不存在,則出錯

「wb」只寫      為了輸入資料,開啟乙個二進位制檔案;如果存在同名檔案,則原內容會被清空;如果指定檔案不存在,則建立乙個新的檔案

「ab」追加      向二進位制檔案尾新增資料;如果指定檔案不存在,則建立乙個

「r+」讀寫       為了讀和寫,開啟乙個已經存在的文字檔案;如果指定檔案不存在,則出錯

「w+」讀寫      為了讀和寫,開啟乙個文字檔案;如果存在同名檔案,則原內容會被清空;如果指定檔案不存在,則建立乙個新的檔案

「a+」讀寫      開啟乙個文字檔案,在檔案尾進行讀和寫;如果指定檔案不存在,則建立乙個新的檔案

「rb+」讀寫       為了讀和寫,開啟乙個已經存在的二進位制檔案;如果指定檔案不存在,則出錯

「wb+」讀寫      為了讀和寫,開啟乙個二進位制檔案;如果存在同名檔案,則原內容會被清空;如果指定檔案不存在,則建立乙個新的檔案

「ab+」讀寫      開啟乙個二進位制檔案,在檔案尾進行讀和寫;如果指定檔案不存在,則建立乙個新的檔案

#include int main()

else

system("pause");

return 0;

}

1.檔案的順序寫操作函式

fprintf()/fputs()/fputc()

(1)int fprintf(file* stream,char* format,);

返回值為實際寫入檔案中的位元組數;如果寫入失敗,則返回乙個負數

(2)int fputs(char* string,file* stream);

將string指標所指向的字串寫入到檔案中;操作成功時,返回值為0;操作失敗時,返回乙個非0數

(3)int fputc(int ch,file* stream);

向檔案寫入乙個字元;操作成功時,返回項檔案所寫字元的值;失敗時,返回eof(-1)

#include int main()

2.檔案的順序讀操作函式

fscanf()/fgets()/fgetc()

(1)int fscanf(file* stream,char* format,);

第乙個引數為要讀取的檔案的檔案指標,基本上和scanf()函式的用法一致;

(2)char fgets(char* string,int n,file* stream);

從檔案中讀取n-1個字元(n用來指定字元數),把它們放入string指向的字串中,讀入之後自動向字串末尾加乙個空字元,讀成功返回string指標,失敗則返回乙個空指標;

(3)int getc(file* stream);

返回檔案當前位置的第乙個字元,讀錯誤時返回eof;

#include int main()

1.fseek函式:根據檔案指標的位置和偏移量來定位檔案指標

int fseek(file* stream,long offset,int frowwhere);

將檔案的位置指標設定從fromwhere開始的offset位元組上;

fromwhere是下列幾個巨集定義之一:

符號常數

數值含義

seek_set

0檔案開始

seek_cur

1檔案指標的當前位置

seek_end

2檔案結尾*

2.ftell函式

返回檔案指標相對於起始位置的偏移量

long int ftell(file* stream); 

#include int main()

3.rewind函式

讓檔案指標的位置回到檔案的起始位置

void rewind(file* stream);

寫入位置改為0,會覆蓋之前寫的內容

#include int main()

rewind(pfile);

fputc(':', pfile);

fclose(pfile);

system("pause");

return 0;

}

在檔案讀取結束的時候,判斷是讀取失敗結束,還是遇到檔案尾結束。

(1)文字檔案讀取是否結束,判斷返回值是否為eof(fgetc)或者為null(fegts);

#include int main()

//fegtc 當讀取失敗時或者遇到檔案結束時,都會返回eof

while ((c = fgetc(fp)) != eof)

//判斷是什麼原因結束的

if (ferror(fp))

else if (feof(fp))

system("pause");

return 0;

}

(2)二進位制檔案讀取的結束,判斷返回值是否小於實際要讀的個數;(fread判斷返回值是否小於實際要讀的個數)

fread 二進位制的輸入:

size_t fread(void *buffer,size_t num_bytes,size_t count,file *fp);

buffer是接收讀入資料的記憶體區的指標;

count的值確定讀/寫多少項,每項長度等於num_bytes。

fwrite 二進位制的輸出:

size_t fwrite(const void *buffer,size_t num_bytes,size_t count,file *fp);

buffer是寫入到那個檔案的資訊的指標。

#include enum;

int main()

; double num = 0.0;

size_t ret_code = 0;

file* fp = fopen("test_two.txt", "wb");//二進位制

//二進位制輸出 寫

fwrite(arry, sizeof(*arry), size, fp);

fclose(fp);

fp = fopen("test_two.txt", "rb");

//讀檔案

while ((ret_code=fread(&num,sizeof(double),1,fp))>=1)

//判斷是什麼原因結束的

if (ferror(fp))

else if (feof(fp))

system("pause");

return 0;

}

c語言基礎筆記(9 c語言當中的函式)

9.1 函式的原型和呼叫 在使用乙個函式前必須定義或者宣告函式。9.2 函式的形參與實參 在呼叫函式的時候,函式大多數都有引數,主調函式和被呼叫函式之間需要傳遞資料。在定義函式時函式名後面括弧中的變數名稱為 形式引數 簡稱形參。在呼叫函式時,函式名後面括號中的變數或表示式稱為 實際引數 簡稱實參。1...

C語言檔案操作總結

文字模式 二進位制模式 c可以認識ctrl z為檔案結尾 c只會把ctrl z當做檔案中的乙個字元,真正的檔案結尾在後面 ms dos用 r n組合表示換行符,c將 r n看作 n程式將看到這兩個字元 此外,檔案的第乙個字元可能不是檔案的第乙個字元,所以用文字檔案開啟,ftell 可以返回正確的檔案...

C語言檔案操作總結

幾乎每乙個專案都有乙個日誌記錄功能,用於記錄軟體執行的情況方便日後的審計與審查。而日誌記錄就涉及到了檔案的讀寫操作。因此,本文對c語言下的檔案操作進行了總結。fopen用來開啟檔案。file fopen const char name,const char mode name 是要開啟檔案的檔名指標...