日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)

發(fā)布時(shí)間:2024/2/28 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?

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.打開(kāi)文件fopen()

函數(shù)功能: 打開(kāi)一個(gè)文件   
函數(shù)原型:FILE * fopen(const char * path,const char * mode);
所需庫(kù): <stdio.h>?
返回值: 文件順利打開(kāi)后,指向該流的文件指針就會(huì)被返回。如果文件打開(kāi)失敗則返回NULL,并把錯(cuò)誤代碼存在errno 中。   

一般而言,打開(kāi)文件后會(huì)作一些文件讀取或?qū)懭氲膭?dòng)作,若打開(kāi)文件失敗,接下來(lái)的讀寫(xiě)動(dòng)作也無(wú)法順利進(jìn)行,所以一般在fopen()后作錯(cuò)誤判斷及處理。
if((fin = fopen("a.txt","r")) == NULL)
?printf("Open file error.\n");

參數(shù)說(shuō)明:   
參數(shù)path字符串包含欲打開(kāi)的文件路徑及文件名,參數(shù)mode字符串則代表著流形態(tài)。   
mode有下列幾種形態(tài)字符串:  (常用的就前幾個(gè),后面用到了再查,不用記) 
r 以只讀方式打開(kāi)文件,該文件必須存在。
w 打開(kāi)只寫(xiě)文件,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以附加的方式打開(kāi)只寫(xiě)文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。(EOF符保留)

rb 為輸入打開(kāi)一個(gè)二進(jìn)制文件。
wb 只寫(xiě)打開(kāi)或新建一個(gè)二進(jìn)制文件;只允許寫(xiě)數(shù)據(jù)。
ab 向二進(jìn)制文件尾添加數(shù)據(jù)

r+ 以可讀寫(xiě)方式打開(kāi)文件,該文件必須存在。?
w+ 打開(kāi)可讀寫(xiě)文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a+ 以附加方式打開(kāi)可讀寫(xiě)的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。 (原來(lái)的EOF符不保留)

rb+ 讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)。?
wb+ 讀寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫(xiě)。?
ab+ 讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀或在文件末追加數(shù)據(jù)。   

rt+ 讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀和寫(xiě)。  
wt+ 讀寫(xiě)打開(kāi)或著建立一個(gè)文本文件;允許讀寫(xiě)。   
at+ 讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀或在文本末追加數(shù)據(jù)。   


上述的形態(tài)字符串都可以再加一個(gè)b字符,如rb、w+b或ab+等組合,加入b 字符用來(lái)告訴函數(shù)庫(kù)打開(kāi)的文件為二進(jìn)制文件,而非純文字文件。
不過(guò)在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)閉就是指文件指針變量不指向該文件,也就是文件指針變量與文件脫鉤,此后不能再通過(guò)該指針對(duì)原來(lái)與其相聯(lián)系的文件進(jìn)行讀寫(xiě)操作。除非再次打開(kāi),使該指針變量重新指向該文件。

  用 fclose 函數(shù)關(guān)閉文件,fclose 函數(shù)調(diào)用的一般形式為

  fclose(文件指針);

  例如:

  fclose(fp);

  應(yīng)該養(yǎng)成在程序終止之前關(guān)閉所有文件的習(xí)慣,如果不關(guān)閉文件將丟失數(shù)據(jù)。因?yàn)槿缜八?#xff0c;在向文件寫(xiě)數(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è)問(wèn)題,它先把緩沖區(qū)中的數(shù)據(jù)輸出到磁盤(pán)文件,然后才釋放文件指針變量。

  fclose 函數(shù)也帶回一個(gè)值,當(dāng)順利地執(zhí)行了關(guān)閉操作,則返回值為 0 ,否則返回 EOF (-1) 。可以用 ferror 函數(shù)來(lái)測(cè)試。
==============================================================
下面用一個(gè)程序來(lái)說(shuō)明上面幾個(gè)函數(shù)用法:

將a.txt拷貝到/test目錄下,名字也為a.txt

[cpp]?view plaincopy
  • /**?
  • ?*?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?方式,只能用于往文件中寫(xiě),如果不存在,則以指定的文件名新建一個(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.判斷文件是否存在和是否可讀可寫(xiě)
    int access(const char *pathname,int mode);

    pathname:是文件名稱
    mode是我們要判斷的屬性.可以取以下值或者是他們的組合:
    R_OK文件可以讀
    W_OK文件可以寫(xiě)
    X_OK文件可以執(zhí)行
    F_OK文件存在.

    當(dāng)我們測(cè)試成功時(shí),函數(shù)返回0,否則如果有一個(gè)條件不符時(shí),返回-1.

    用一個(gè)程序?qū)嵗齺?lái)認(rèn)識(shí)這個(gè)函數(shù):
    輸入一個(gè)文件名(在命令行中輸入),判斷該文件是否存在,并且可讀,不存在提示不存在,不可讀提示不可讀,如果存在并可讀,則在當(dāng)前目錄下,創(chuàng)建一個(gè)目錄test,并將該文件拷貝到test中

    [cpp]?view plaincopy
  • /**?
  • ?*?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??????????????????????????????//到這里,說(shuō)明即存在又可讀???
  • ????{??
  • ????????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;??
  • } ?
  • 總結(jié)

    以上是生活随笔為你收集整理的C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。