磁碟上的檔案是檔案;檔案包含檔案內容和檔案屬性,都是資料,需要儲存;檔案分為程式檔案(源程式檔案、目標檔案、可執行程式檔案)和資料檔案
資料檔案分為文字檔案(以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 是要開啟檔案的檔名指標...