C語言判斷檔案存在和建立檔案

petercao發表於2024-06-05

用C語言可以實現新建檔案,這裡要用到一個fopen函式,它是一個非常強大的函式,可以以各種方式建立、讀取檔案,具體語法如下:

檔案指標名=fopen(檔名,使用檔案方式);

“檔案指標名”必須是被說明為File型別的指標變數;

“檔名”是被開啟檔案的檔名,也包括路徑;

“使用檔案方式”是指檔案的型別和操作方式(新建,或寫入內容);

“檔名”是字串常量或者字元陣列。

檔案使用方式由r、w、a、b、、+等6個字元拼成,其各字元的含義是:

r(read)讀;

w(write)寫;

a(append)新增;

b(binary)二進位制檔案;

t(text)文字檔案,可省略;

+ 讀和寫

凡用 r 開啟一個檔案時,該檔案必須已經存在,且只能從該檔案讀出;

凡用 w 開啟一個檔案時,只能向該檔案中寫入。若指定的檔案不存在,則以指定的檔名新建該檔案,若要開啟的檔案已經存在裡面也有內容時,就刪除該檔案,重建一個新檔案。

若要向一個已經存在的檔案中新增新內容,則只能用 a 方式開啟該檔案,且該檔案一定要存在,否則會出錯;

在開啟一個檔案時,如果出錯,fopen函式將返回空值NULL,在程式中可以用此資訊來判別檔案開啟工作是否已經完成,並作出相應的處理。例:

if((fp=fopen("c:\\xiangxiao0831","rb"))=NULL);

{

printf("在開啟 c:\\xiangxiao0831時出錯了!");

getchar();

exit(1);

意思是:在開啟c:\\xiangxiao0831這個檔案時出錯了,但是這裡可以報錯,即在螢幕上顯示 ”在開啟c:\\xiangxiao0831時出錯了!“,然後該程式等待指令,當輸入任意字元後再繼續執行(執行退出指令)。

這裡出現了一個前面不曾見到的檔案用法”rb”,實際上是r、w、a、b等字元組合表示的檔案用法,還有如下組合方式:

rb 開啟一個用於讀取的二進位制檔案;

wb 建立一個用於寫入的二進位制檔案;

r+ 開啟一個可讀可寫的文字檔案;

w+ 新建一個可讀可寫的文字檔案;

#include<stdio.h>

main()

{

char a="我的第一篇部落格";

File*file;

file=fopen(“f:\\資料/電腦/xiangxiao0831”,“r+”);

if(file==NULL)

printf("檔案不存在!");

else

file=fopen("f:\\資料/電腦/xiangxiao0831"."w+");

fprintf(file,"a=c%",a);

fclose(file);

}


C語言判斷資料夾或者檔案是否存在的方法

方法一:access函式判斷資料夾或者檔案是否存在

函式原型: int access(const char *filename, int mode);

所屬標頭檔案:io.h

filename:可以填寫資料夾路徑或者檔案路徑

mode:0 (F_OK) 只判斷是否存在

2 (R_OK) 判斷寫入許可權

4 (W_OK) 判斷讀取許可權

6 (X_OK) 判斷執行許可權

用於判斷資料夾是否存在的時候,mode取0,判斷檔案是否存在的時候,mode可以取0、2、4、6。 若存在或者具有許可權,返回值為0;不存在或者無許可權,返回值為-1。

錯誤程式碼

EACCESS 引數pathname 所指定的檔案不符合所要求測試的許可權。

EROFS 欲測試寫入許可權的檔案存在於只讀檔案系統內。

EFAULT 引數pathname指標超出可存取記憶體空間。

EINVAL 引數mode 不正確。

ENAMETOOLONG 引數pathname太長。

ENOTDIR 引數pathname為一目錄。

ENOMEM 核心記憶體不足

ELOOP 引數pathname有過多符號連線問題。

EIO I/O 存取錯誤。

特別提醒:使用access()作使用者認證方面的判斷要特別小心,例如在access()後再做open()的空檔案可能會造成系統安全上的問題。

例項:

#include <stdio.h>

#include <io.h>

int main(void)

{

if ( !access("C://windows",0) )

puts("C://windows EXISITS!");

else

puts("C://windows DOESN'T EXISIT!");

return 0;

}

方法二:fopen函式判斷檔案是否存在

函式原型:FILE *fopen (char *filename, char *type);

filename:檔案路徑

type:開啟檔案的方式(有r、w、r+、w+、a、rb、wb等等)

用於判斷檔案是否存在可以使用 r 或者 rb ,因為使用 其它方式的話,可能會自動建立檔案。 返回值為NULL(打不開)和正數(能開啟)。

特別提醒:用這種方法做出的判斷是不完全正確的,因為有的檔案存在,但是可能不可讀。


refs:

https://www.cnblogs.com/xiangxiao/articles/4507181.html

https://www.runoob.com/cprogramming/c-preprocessors.html

相關文章