1.建檔案夾
int _mkdir(const char *path,mode_t mode);
函數名: _mkdir
功 能: 建立一個目錄
用 法: int _mkdir( const char *dirname );
頭檔案庫:direct.h
傳回值:建立一個目錄,若成功則傳回0,否則傳回-1
=====================================================
2.打開檔案fopen()
函數功能: 打開一個檔案
函數原型:FILE * fopen(const char * path,const char * mode);
所需庫: <stdio.h>
傳回值: 檔案順利打開後,指向該流的檔案指針就會被傳回。如果檔案打開失敗則傳回NULL,并把錯誤代碼存在errno 中。
一般而言,打開檔案後會作一些檔案讀取或寫入的動作,若打開檔案失敗,接下來的讀寫動作也無法順利進行,是以一般在fopen()後作錯誤判斷及處理。
if((fin = fopen("a.txt","r")) == NULL)
printf("Open file error.\n");
參數說明:
參數path字元串包含欲打開的檔案路徑及檔案名,參數mode字元串則代表着流形态。
mode有下列幾種形态字元串: (常用的就前幾個,後面用到了再查,不用記)
r 以隻讀方式打開檔案,該檔案必須存在。
w 打開隻寫檔案,若檔案存在則檔案長度清為0,即該檔案内容會消失。若檔案不存在則建立該檔案。
a 以附加的方式打開隻寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的内容會被保留。(EOF符保留)
rb 為輸入打開一個二進制檔案。
wb 隻寫打開或建立一個二進制檔案;隻允許寫資料。
ab 向二進制檔案尾添加資料
r+ 以可讀寫方式打開檔案,該檔案必須存在。
w+ 打開可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案内容會消失。若檔案不存在則建立該檔案。
a+ 以附加方式打開可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的内容會被保留。 (原來的EOF符不保留)
rb+ 讀寫打開一個二進制檔案,隻允許讀資料。
wb+ 讀寫打開或建立一個二進制檔案,允許讀和寫。
ab+ 讀寫打開一個二進制檔案,允許讀或在檔案末追加資料。
rt+ 讀寫打開一個文本檔案,允許讀和寫。
wt+ 讀寫打開或着建立一個文本檔案;允許讀寫。
at+ 讀寫打開一個文本檔案,允許讀或在文本末追加資料。
上述的形态字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的檔案為二進制檔案,而非純文字檔案。
不過在POSIX系統,包含Linux都會忽略該字元。由fopen()所建立的新檔案會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此檔案權限也會參考umask 值。
有些C編譯系統可能不完全提供所有這些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,讀者注意所用系統的規定。
==========================================================
3.關閉檔案 fclose()
在使用完一個檔案後應該關閉它,以防止它再誤用,關閉就是指檔案指針變量不指向該檔案,也就是檔案指針變量與檔案脫鈎,此後不能再通過該指針對原來與其相聯系的檔案進行讀寫操作。除非再次打開,使該指針變量重新指向該檔案。
用 fclose 函數關閉檔案,fclose 函數調用的一般形式為
fclose(檔案指針);
例如:
fclose(fp);
應該養成在程式終止之前關閉所有檔案的習慣,如果不關閉檔案将丢失資料。因為如前所述,在向檔案寫資料時,是先将資料輸到緩沖區,待緩沖區充滿後才正式輸出給檔案,如果當資料未充滿緩沖區,而程式結束運作,就會将緩沖區中的資料丢失,用 fclose 函數關閉檔案,可以避免這個問題,它先把緩沖區中的資料輸出到磁盤檔案,然後才釋放檔案指針變量。
fclose 函數也帶回一個值,當順利地執行了關閉操作,則傳回值為 0 ,否則傳回 EOF (-1) 。可以用 ferror 函數來測試。
==============================================================
下面用一個程式來說明上面幾個函數用法:
将a.txt拷貝到/test目錄下,名字也為a.txt
/**
* Author: Gneveek
* Data: 2011-10-6
* Descripition: Clock Chen's Homework : File operation #1
* 一、将a.txt拷貝到/test目錄下,名字也為a.txt
*/
#include <stdio.h>
#include <direct.h> //用 _mkdir()建立一個檔案夾(目錄)
int main()
{
_mkdir("test");
char c;
FILE *fin, *fout;
if((fin = fopen("a.txt","r")) == NULL)
printf("I'm so sorry,Open file error.\n");
if((fout = fopen("test\\a.txt","w")) == NULL) //以 w 方式,隻能用于往檔案中寫,如果不存在,則以指定的檔案名建立一個檔案
printf("I'm so sorry,Open file error.\n");
while((c = fgetc(fin)) != EOF)
fputc(c,fout);
fclose(fin);
fclose(fout);
return 0;
}
================================================================
4.判斷檔案是否存在和是否可讀可寫
int access(const char *pathname,int mode);
pathname:是檔案名稱
mode是我們要判斷的屬性.可以取以下值或者是他們的組合:
R_OK檔案可以讀
W_OK檔案可以寫
X_OK檔案可以執行
F_OK檔案存在.
當我們測試成功時,函數傳回0,否則如果有一個條件不符時,傳回-1.
用一個程式執行個體來認識這個函數:
輸入一個檔案名(在指令行中輸入),判斷該檔案是否存在,并且可讀,不存在提示不存在,不可讀提示不可讀,如果存在并可讀,則在目前目錄下,建立一個目錄test,并将該檔案拷貝到test中
/**
* Author: Gneveek
* Data: 2011-10-6
* Descripition: Clock Chen's Homework : File operation #2
*二、輸入一個檔案名(在指令行中輸入),判斷該檔案是否存在,并且可讀,
*不存在提示不存在,不可讀提示不可讀,如果存在并可讀,
*則在目前目錄下,建立一個目錄test,并将該檔案拷貝到test中
*/
#include <stdio.h>
#include <io.h>
#include <direct.h>
#include <string.h>
int main()
{
FILE *fin, *fout;
char filename[256];
char pathname[256] = "test\\";
scanf("%s",filename);
if(access(filename,F_OK) == -1) //判斷存在與否
printf("This file does not exist!\n");
else if(access(filename,R_OK) == -1) //如果存在,判斷可讀否
printf("Cann't Read!\n");
else //到這裡,說明即存在又可讀
{
char c;
_mkdir("test");
strcat(pathname,filename);
fin = fopen(filename,"r");
fout = fopen(pathname,"w");
while((c = fgetc(fin)) != EOF)
fputc(c,fout);
}
return 0;
}
===================================================================