要處理檔案的輸出入,您必須先include 標頭,如果要處理檔案輸出,您要使用fopen()函式開啟檔案,fopen()函式的雛型宣告如下:
file* fopen (const char*, const char*);
file是個
struct自訂型態:
typedef struct _iobuf
file;
fopen()會傳回乙個file例項的位址值,實際上您不太需要了解file的每個成員作用,您只要將file的位址值傳給像是fgetc()、fputc()、fgets()、fputs()的函式進檔案i/o處理即可,
fopen ()的第乙個引數用來指定要開啟的檔名稱,第二個引數用來指定檔案i/o模式,模式基本上就是讀、寫、附加,分別可使用r、w與a來設定,如果加上+, 表示檔案可讀可寫,如果加上b,表示以區塊(block)方式,即二進位方式進行讀寫,例如以下是可設定的模式:
r開啟檔案進行唯讀,若檔案不存在,則傳回null
w開啟檔案進行唯寫,若檔案不存在,則建立新檔,則檔案存在則將之刪除,再建立新檔
a開啟檔案進行附加,若檔案存在,則資料從檔案尾端寫入,則檔案不存在則建立新檔
rb以二進位模式開啟檔案進行唯讀,windows 下需要加 b,linux 下則會予以忽略
wb以二進位模式開啟檔案進行唯寫
,windows 下需要加 b,linux 下則會予以忽略
ab以二進位模式開啟檔案進行附加
,windows 下需要加 b,linux 下則會予以忽略
r+開啟檔案進行讀寫,若檔案不存在,則建立新檔,若檔案存在,資料將從檔案開頭進行覆寫
w+開啟檔案進行讀寫,
若檔案不存在,則建立新檔,若檔案存在則覆寫原有的資料
a+開啟檔案進行附加、讀取,若檔案不存在則建立新檔,
若檔案存在,則資料從檔案尾端寫入
r+b以二進位方式開啟檔案進行讀寫
,windows 下需要加 b,linux 下則會予以忽略
w+b以二進位方式
開啟檔案進行讀寫
,windows 下需要加 b,linux 下則會予以忽略
a+b以二進位方式
開啟檔案進行附加、讀取
,windows 下需要加 b,linux 下則會予以忽略
windows作業系統將文字檔和二進位檔案當作兩種不同的檔案,而linux則不區別,在windows下讀寫非文字檔案,必須加上b模式,在linux下則會忽略b。
例如以下的程式片段可開啟乙個檔案進行讀取:
file *file = fopen("test.txt", "w");
若開啟檔案成功,則file將儲存位址值,您可以使用以下的程式片段來測試檔案是否開啟成功:
if(file == null)
null為使用#define定義的展開字,其值為0:
#define null 0
fopen()會使用緩衝區來減少對磁碟的實際i/o,以加快檔案訪問效率,當您在程式中進行讀寫動作時,實際上會先對緩衝區作訪問,而非實際的磁碟,
檔案開啟乙個重要的觀念與習慣是,不使用檔案時,一定要記得關閉檔案,閉關檔案會將緩衝區中的資料真正寫入磁碟,若忘了關閉檔案,可能會造成資料的遺失。
您可以使用fclose()來關閉檔案:
int fclose(file *fp);
若檔案正常關閉,則傳回0,否則將傳回非0值。
開啟檔案之後,您可以使用fgetc()來讀取檔案中的字元,使用fputc()來將字元寫入檔案:
int fgetc(file* fp);
int fputc(int ch, file *fp);
fgetc()傳入file例項的位址值,每執行一次就會從檔案中讀取乙個字元,直到讀到檔尾(end of file, eof)為止,文字模式時判斷檔案結尾,可以如下撰寫:
while((ch = fgetc(file)) != eof)
使用fgetc(),只要指定file位址值給它就可以了,而fputc()則指定要寫入的字元及file位址值。
下面這個程式直接示範如何讀取並寫入純文字檔案,會將指定的檔案讀取並複製至另乙個檔案:
#include int main(int argc, char* argv)file *file1 = fopen(argv[1], "r");
if(!file1)
file *file2 = fopen(argv[2], "w");
if(!file2)
char ch;
while((ch = fgetc(file1)) != eof)
fclose(file1);
fclose(file2);
return 0;
}
您也可以使用fgets()來讀取整個字串,使用fputs()來寫入整個字串:
char* fgets(char
* str, int length, file *fp);
int fputs(char *str, file *fp);
fgets()第乙個引數為要讀入的字串儲存的陣列位址,第二個引數為要讀入的字元長度,由於字串必須包留字元陣列最後乙個元素為空白字元,才視之為字 串,所以實際讀入的長度為length - 1,第三個引數為file位址值,而fputs()第乙個引數為寫入的字串,第二個引數為file位址值。
以下的程式使用fgets()、fputs()改寫上面這個程式:
#include int main(int argc, char* argv)file *file1 = fopen(argv[1], "r");
if(!file1)
file *file2 = fopen(argv[2], "w");
if(!file2)
char str[50];
while(fgets(str, 50, file1) != null)
fclose(file1);
fclose(file2);
return 0;
}
在程式執行過程開啟的標準輸出stdout、標準輸入stdin、標準錯誤stderr,事實上也是檔案串流的特例,在c程式中,也常見到以下的方式,以便直接控制這三個標準輸入、輸出、錯誤:
#include int main(int argc, char* argv)file *file1 = fopen(argv[1], "r");
if(!file1)
file *file2 = fopen(argv[2], "w");
if(!file2)
char str[50];
while(fgets(str, 50, file1) != null)
fclose(file1);
fclose(file2);
return 0;
}
程式的執行結果與上乙個範例是相同的。
格式化,強調 數值格式化
聚合函式返回的的數值型別的值有個特點就是沒有被格式化。通過前面的帶 sum 聚合函式的示例,我們可以看到這一點 注意合計值 命令,或者在物件檢視器中選中 displayformat 屬性。在上節的示例中,格式化操作是針對一物件或物件內的表示式,在物件內僅有乙個表示式時它還能正常工作,不過當物件內不有...
linux 檔案格式化
1 按兩下小寫g,即gg,定位游標到第一行。2 按住shift v,即大寫v,進入視覺化編輯的列編輯模式。3 shift g,即大寫g,選中整個 4 按下等號 格式化所有 libxml2 是乙個xml的c語言版的解析器,本來是為gnome專案開發的工具,是乙個基於mit license的免費開源軟體...
格式化讀寫檔案fprintf,fscanf
define crt secure no warnings include include include int fprintf file stream,const char format,功能 根據引數format字串來轉換並格式化資料,然後將結果輸出到stream指定的檔案中,指定出現字串結束...