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
C++
/** * 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中
C++
/** * 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;}
新聞熱點
疑難解答
圖片精選