C語(yǔ)言文件操作 fopen, fclose, mkdir詳解
1.建文件夾
int _mkdir(const char *path,mode_t mode);
函數(shù)名: _mkdir
功 能: 建立一個(gè)目錄
用 法: int _mkdir( const char *dirname );
頭文件庫(kù):direct.h
返回值:創(chuàng)建一個(gè)目錄,若成功則返回0,否則返回-1
=====================================================
2.打開文件fopen()
函數(shù)功能: 打開一個(gè)文件
函數(shù)原型:FILE * fopen(const char * path,const char * mode);
所需庫(kù): <stdio.h>
返回值: 文件順利打開后,指向該流的文件指針就會(huì)被返回。如果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在errno 中。
一般而言,打開文件后會(huì)作一些文件讀取或?qū)懭氲膭?dòng)作,若打開文件失敗,接下來的讀寫動(dòng)作也無法順利進(jìn)行,所以一般在fopen()后作錯(cuò)誤判斷及處理。
if((fin = fopen(“a.txt”,”r”)) == NULL) printf(“Open file error.\n”);
參數(shù)說明:
參數(shù)path字符串包含欲打開的文件路徑及文件名,參數(shù)mode字符串則代表著流形態(tài)。
mode有下列幾種形態(tài)字符串: ?。ǔS玫木颓皫讉€(gè),后面用到了再查,不用記)
r 以只讀方式打開文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。(EOF符保留)
rb 為輸入打開一個(gè)二進(jìn)制文件。
wb 只寫打開或新建一個(gè)二進(jìn)制文件;只允許寫數(shù)據(jù)。
ab 向二進(jìn)制文件尾添加數(shù)據(jù)
r+ 以可讀寫方式打開文件,該文件必須存在。
w+ 打開可讀寫文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。 (原來的EOF符不保留)
rb+ 讀寫打開一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)。
wb+ 讀寫打開或建立一個(gè)二進(jìn)制文件,允許讀和寫。
ab+ 讀寫打開一個(gè)二進(jìn)制文件,允許讀或在文件末追加數(shù)據(jù)。
rt+ 讀寫打開一個(gè)文本文件,允許讀和寫。
wt+ 讀寫打開或著建立一個(gè)文本文件;允許讀寫。
at+ 讀寫打開一個(gè)文本文件,允許讀或在文本末追加數(shù)據(jù)。
上述的形態(tài)字符串都可以再加一個(gè)b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數(shù)庫(kù)打開的文件為二進(jìn)制文件,而非純文字文件。
不過在POSIX系統(tǒng),包含Linux都會(huì)忽略該字符。由fopen()所建立的新文件會(huì)具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權(quán)限,此文件權(quán)限也會(huì)參考umask 值。
有些C編譯系統(tǒng)可能不完全提供所有這些功能,有的C版本不用”r+”,”w+”,”a+”,而用”rw”,”wr”,”ar”等,讀者注意所用系統(tǒng)的規(guī)定。
==========================================================
3.關(guān)閉文件 fclose()
在使用完一個(gè)文件后應(yīng)該關(guān)閉它,以防止它再誤用,關(guān)閉就是指文件指針變量不指向該文件,也就是文件指針變量與文件脫鉤,此后不能再通過該指針對(duì)原來與其相聯(lián)系的文件進(jìn)行讀寫操作。除非再次打開,使該指針變量重新指向該文件。
用 fclose 函數(shù)關(guān)閉文件,fclose 函數(shù)調(diào)用的一般形式為
fclose(文件指針);
例如:
fclose(fp);
應(yīng)該養(yǎng)成在程序終止之前關(guān)閉所有文件的習(xí)慣,如果不關(guān)閉文件將丟失數(shù)據(jù)。因?yàn)槿缜八?,在向文件寫?shù)據(jù)時(shí),是先將數(shù)據(jù)輸?shù)骄彌_區(qū),待緩沖區(qū)充滿后才正式輸出給文件,如果當(dāng)數(shù)據(jù)未充滿緩沖區(qū),而程序結(jié)束運(yùn)行,就會(huì)將緩沖區(qū)中的數(shù)據(jù)丟失,用 fclose 函數(shù)關(guān)閉文件,可以避免這個(gè)問題,它先把緩沖區(qū)中的數(shù)據(jù)輸出到磁盤文件,然后才釋放文件指針變量。
fclose 函數(shù)也帶回一個(gè)值,當(dāng)順利地執(zhí)行了關(guān)閉操作,則返回值為 0 ,否則返回 EOF (-1) ??梢杂?ferror 函數(shù)來測(cè)試。
==============================================================
下面用一個(gè)程序來說明上面幾個(gè)函數(shù)用法:
將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()創(chuàng)建一個(gè)文件夾(目錄) 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 方式,只能用于往文件中寫,如果不存在,則以指定的文件名新建一個(gè)文件 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文件可以執(zhí)行
F_OK文件存在.
當(dāng)我們測(cè)試成功時(shí),函數(shù)返回0,否則如果有一個(gè)條件不符時(shí),返回-1.
用一個(gè)程序?qū)嵗齺碚J(rèn)識(shí)這個(gè)函數(shù):
輸入一個(gè)文件名(在命令行中輸入),判斷該文件是否存在,并且可讀,不存在提示不存在,不可讀提示不可讀,如果存在并可讀,則在當(dāng)前目錄下,創(chuàng)建一個(gè)目錄test,并將該文件拷貝到test中
C++
/** * Author: Gneveek * Data: 2011-10-6 * Descripition: Clock Chen's Homework : File operation #2 *二、輸入一個(gè)文件名(在命令行中輸入),判斷該文件是否存在,并且可讀, *不存在提示不存在,不可讀提示不可讀,如果存在并可讀, *則在當(dāng)前目錄下,創(chuàng)建一個(gè)目錄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; }
上一篇:詳解C++循環(huán)創(chuàng)建多級(jí)目錄及判斷目錄是否存在的方法
欄 目:C語(yǔ)言
下一篇:淺談C++中的構(gòu)造函數(shù)分類及調(diào)用規(guī)則
本文標(biāo)題:C語(yǔ)言文件操作 fopen, fclose, mkdir詳解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2451.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery