C檔案操作

weixin_34377065發表於2013-11-05

1,概論

程式執行時,程式本身和資料一般都存放在記憶體中,程式執行結束後,存放在記憶體中的資料會被釋放,如果長期儲存程式執行所需的原始資料,或程式產生的結果資料,就必須以檔案的形式儲存到外部儲存介質上.

2,C語言檔案概述

1,檔案與檔名
  檔案是指存放在外部儲存介質上的資料集合.為標識一個檔案,需要給每個檔案定一個檔名,檔名一般格式,主檔名.[副檔名]
2,檔案分類
  可以從不同的角度對檔案進行分類,
根據檔案內容,可分為程式檔案與資料檔案,
程式檔案又可以分為原始檔,目標檔案,可執行檔案.
3,根據檔案的儲存形式:分為ascii和二進位制檔案.
ascii碼檔案的每一個位元組儲存一個字元,便於對對字元進行處理,一般佔用儲存空間較多,而且需花費轉換時間[ascii與二進位制間互為轉換]
二進位制檔案,是把記憶體中的資料,原樣輸出到磁碟檔案中,可以節省磁碟儲存空間和ascii和二進位制間互為轉換時間.二進位制檔案中一個位元組並對應一個字元,不能直接輸出字元形式,不便於維護閱讀.

3,檔案讀寫,

讀檔案是指,將磁碟檔案中的資料傳送到記憶體的操作.
寫檔案是指,將計算機記憶體中的資料向磁碟檔案中傳.

構成檔案的基本單元與流式檔案
C語言將檔案看作是由一個個字元[ascii碼檔案],或位元組組成的,將這種檔案稱作流式檔案,
在高階語言中組成檔案的基本單位是記錄,對檔案操作的基本單位也是記錄.

4,檔案型別

每個被使用的檔案都在記憶體中開闢一個區
用來存放檔案的相關資訊,(檔名,狀態,位置),這些資訊儲存在一個結構體型別變數中,FILE,結構體型別由系統定義;
typedef struct
{
  int _fd; //檔案描述符
  int _cleft; //緩衝區中剩下的字元
  int _mode; //檔案操作
  char *_nexttc; //下一個字元位置
  char *_buff;  //檔案緩衝區位置
} FILE;

5,檔案操作型別,結構體型別

定義FILE型別指標變數
FILE指標型別變數定義
  FILE *指標變數名;
eg:FILE *fp;
fp是一個指向FILE結構體的指標變數;
可以使fp指向某個檔案的結構體變數,從而通過該結構體變數中的檔案資訊來訪問檔案.

6,檔案開啟函式

fopen(),呼叫方式
FILE *fp;
fp=fopen(檔名,檔案使用方式);
^fp-->使用者自定義的檔案型別指標變數;
檔案的使用方式,具有特定含義的符合
fopen函式功能:以指定的方式開啟指定的檔案,若操作成功,則返回一個指向該檔案的指標,若開啟檔案時錯誤,返回NULL;
  例如:
FILE *fp;
fp=fopen("/C/005/ruiy.dat","rw+");

7,檔案的使用方式;

檔案的操作模式基本字元[單獨使用是對文字檔案];
r -->僅為讀二開啟,(只讀檔案)
w-->僅為寫開啟, (建立新檔案)
a -->僅為新增而開啟, (寫舊檔案)
【注意】前面不是說了嗎:C把檔案看作是有一個ascii字元或一個二進位制字元組成的.
2,按二進位制格式讀寫檔案,字元方式+b;
b輔助說明,按二進位制格式讀寫檔案.
eg:fp=fopen("ruiy.dat","rb");

8,fclose

usage:int fclose(FILE *指標變數名);

功能:關閉檔案指標所指向的檔案,正常關閉了,函式返回值為0,失敗則為非0;

fclose(fp);//關閉檔案所指向的檔案;

9,檔案讀寫操作

單個字元操作讀寫函式,

fputc函式

一般呼叫形式:

fputc(字元常量或變數,檔案指標);

功能:把指定字元存入檔案指標所指向的檔案中;

如果輸出失敗,則返回一個EOF,(-1);

EOF是在stdio.h標頭檔案中的定義的符合常量,值為-1,

eg:fputc(ch,fp);

其中ch為字元變數,fp為檔案指標,

含義,將ch的值輸出到ftp所指向的檔案中

fgetc函式;

一般呼叫形式,字元變數=fgetc(檔案指標);

功能:從檔案指標所指檔案中讀取一個字元賦給指定的字元變數,當遇到一個檔案結束符,返回一個檔案結束符標誌

eg:ch=fgetc(fp);