導航:首頁 > 文件管理 > c如何判斷一個文件

c如何判斷一個文件

發布時間:2023-01-23 01:24:15

『壹』 C/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(打不開)和正數(能打開)。
特別提醒:用這種方法做出的判斷是不完全正確的,因為有的文件存在,但是可能不可讀。

『貳』 c 里,怎麼判斷是否存在某個文件

如果你知道文件名和路徑的話; 直接用 fopen 是C的標准庫函數。 參數為FILE * fopen(const char * path,const char * mode); 路徑為完整路徑, mode 為打開方式, 是只讀方式打開,還是讀寫方式打開這些。

如果你只知道文件名, 不知道路徑, 我猜你想要個類似於windows 裡面的 搜索的。。。 這個說來話長了。。

再或者, 你知道路徑, 不知道文件名?
那個, 要用系統的API 來干這個事情了。不用系統級的高級函數, 搞不定了。因為這個是整個文件系統的事情了。。

『叄』 C語言,判斷一個文件是否存在

可以使用庫函抄數 access,該函數襲聲明於頭文件 io.h,
函數原型為:
int access(const char *filename, int amode);
amode參數為0時表示檢查文件的存在性,如果文件存在,返回0,不存在,返回-1。
這個函數還可以檢查其它文件屬性:
06 檢查讀寫許可權
04 檢查讀許可權
02 檢查寫許可權
01 檢查執行許可權
00 檢查文件的存在性

例如 if(access("D:\\123.txt", 0) == -1) printf("文件不存在");

『肆』 C語言判斷指定文件是否存在

頭文件:.h
功 能: 確定文件或文件夾的訪問許可權。即,檢查某個文件的存取方式,比如說是只讀方式、只寫方式等。如果指定的存取方式有效,則函數返回0,否則函數返回-1。
用 法: int access(const char *filenpath, int mode); 或者int _access( const char *path, int mode );
參數說明:
filenpath
文件或文件夾的路徑,當前目錄直接使用文件或文件夾名
備註:當該參數為文件的時候,access函數能使用mode參數所有的值,當該參數為文件夾的時候,access函數值能判斷文件夾是否存在。在WIN NT 中,所有的文件夾都有讀和寫許可權
mode
要判斷的模式
在頭文件unistd.h中的預定義如下:
#define R_OK 4 /* Test for read permission. */
#define W_OK 2 /* Test for write permission. */
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
具體含義如下:
00 只判斷是否存在
02 只判斷是否有寫許可權
04 只判斷是否有讀許可權
06 判斷是否有讀並且有寫許可權
程序
#include<stdio.h>
#include<io.h>
int file_exists(char *filename);
int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ?"YES":"NO");
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}

頭文件:io.h
功 能: 確定文件或文件夾的訪問許可權。即,檢查某個文件的存取方式,比如說是只讀方式、只寫方式等。如果指定的存取方式有效,則函數返回0,否則函數返回-1。
用 法: int access(const char *filenpath, int mode); 或者int _access( const char *path, int mode );
參數說明:
filenpath
文件或文件夾的路徑,當前目錄直接使用文件或文件夾名
備註:當該參數為文件的時候,access函數能使用mode參數所有的值,當該參數為文件夾的時候,access函數值能判斷文件夾是否存在。在WIN NT 中,所有的文件夾都有讀和寫許可權
mode
要判斷的模式
在頭文件unistd.h中的預定義如下:
#define R_OK 4 /* Test for read permission. */
#define W_OK 2 /* Test for write permission. */
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
具體含義如下:
00 只判斷是否存在
02 只判斷是否有寫許可權
04 只判斷是否有讀許可權
06 判斷是否有讀並且有寫許可權
程序例
#include<stdio.h>
#include<io.h>
int file_exists(char *filename);
int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ?"YES":"NO");
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}

『伍』 怎樣讓c語言判斷文件是否存在

FILE * fp;

fp=fopen("h:\\abc\\x.txt","r");

if(fp==NULL)
{
//不存在
}
else
{
fclose(fp);
}

可以抄把上述代碼封襲裝成一個函數。

其實也可以考慮用Windows api 來進行判斷

『陸』 c語言如何判斷一個文件是否被修改

可以用 文件狀態 ,例如 文件建立時間,文件最後一次修改時間,文件最後一次被訪問的時間,做判斷。
獲取文件狀態用:
#include <io.h>
int get_namein_time(char *namein, char * ftime){
struct _finddata_t fileinfo;
int res,DEBUG=0,flag=0;
if ( (res = _findfirst(namein, &fileinfo)) == -1){
if (DEBUG==1) printf("get file info error !\n");
return 0;
};
if ( strcmp(namein,fileinfo.name)==0 ) {
flag=1; goto Lab;
}
do {
if ( strcmp(namein,fileinfo.name)==0 ) {flag=1;goto Lab;}
} while ( _findnext(res, &fileinfo) ==0);
Lab: strcpy(ftime,ctime(&fileinfo.time_write));
_findclose(res);
return flag;
}

最可靠的是用文件的哈希碼判斷,就是區塊鏈中用的方法。
例如視窗系統,調用系統 Certutil 計算出 文件的 哈希碼,與文件原來的碼對比。若變了,就是被修改了。
Certutil -hashfile abc.txt MD5 這個檢查 文件 abc.txt
Certutil -hashfile XYZ.txt SHA512 這個檢查 文件 XYZ.txt

『柒』 C語言怎麼判斷一個文件為空

我這里有一種方法,不知能滿足樓主的要求不?
FILE *pfile;
int filepos = 0;
pfile = fopen("test.txt", "r");
fseek(pfile, 0, SEEK_END);
filepos = ftell(pfile);
if(0 == pos)
{
puts("The file is null!");
}
else
{
puts("The file has some content!");
}

『捌』 C語言如何判斷文件類型

windows下,可以根據文件名的擴展名去判斷,如.txt是文本文件,.exe是可執行文件
把文件名存到一個變數s中,用strrchr(s,'.')函數去得到擴展名,進行判斷就可以了!

『玖』 C 判斷文件或文件夾是否存在

C/C++中判斷某一文件或目錄是否存在
1.C++很簡單的一種辦法:#include<iostream#include<fstreamusingnamespacestd;#defineFILENAME"stat.dat"intmain(){fstream_file;
_file.open(FILENAME,ios::in);if(!_file){cout<<FILENAME<<"沒有被創建";}else{cout<<FILENAME<<"已經存在";}return0;}
2.利用 c 語言的庫的辦法:
函數名: access功能: 確定文件的訪問許可權用法: int access(const char *filename, intamode);
以前一直沒用過這個函數,今天調試程序發現了這個函數,感覺挺好用,尤其是判斷一個文件或文件夾是否存在的時候,用不著再find了,文件的話還可以檢測讀寫許可權,文件夾的話則只能判斷是否存在,下面摘自MSDN:int_access(constchar*path,
intmode);Return Value
Each of these functions returns 0 if the file has the given
mode. The function returns –1 if the named file does not exist or
is not accessible in the given mode; in this case,errnois set as follows:EACCESAccess denied: file』s permission setting does not
allow specified access.
ENOENTFilename or path not found.
ParameterspathFile or directory pathmodePermission settingRemarksWhen used with files, the_accessfunctiondetermines whether the specified file exists and can be accessed as
specified by the value ofmode
. When used with
directories,
_accessdetermines only whether the
specified directory exists; in Windows NT, all directories have
read and write access.
modeValue
Checks File For00
Existence only02
Write permission04
Read permission06
Read and write permissionExample#include<io.h#include<stdio.h#include<stdlib.hvoidmain(void){if((_access("ACCESS.C",0))!=-1){printf("FileACCESS.C

『拾』 C語言,判斷一個文件是否存在

你貼的這個函數PathFileExists並不是C語言提供的庫函數,而是windows系統提供的系統調用,如果你是初學者,盡量用C語言提供的庫函數來實現功能,你可以這樣:
int exist(char *file) //傳入想要判斷的路徑字元串指針
{
FILE *fp;

fp=fopen(file,"r"); //fopen是一個C庫函數,用於打開文件,"r"是只讀模式,在這種模式下,如果文件存在,則能成功以只讀模式打開,fopen返回一個非0的文件描述符,如果文件不存在,則fopen返回NULL(NULL意思是空)。正好可以利用這一點來判斷文件是否存在

if(fp=NULL)

return 0; //不存在返回0

else

{

fclose(fp); //存在的話,要先把之前打開的文件關掉

return 1; //然後返回1

}

}
這樣,你就可用這里定義的exist函數判斷文件是否存在了。比如
if(exist("a.txt")==0)printf("不存在!");
else printf("存在!");

如果你真想用PathFileExists這個函數,那麼也很簡單,LPCTSTR你可以簡單理解為就相當於char*,這是windows封裝的一個數據類型。_in是一個修飾符,表示參數是傳入給PathFileExists用的而不是由PathFileExists傳出來的。這個函數可以這樣用:
if(PathFileExists("a.txt")==FALSE)printf("不存在!");
else printf("存在!");
用這個函數時注意加頭文件<windows.h>

有問題請繼續追問啊

閱讀全文

與c如何判斷一個文件相關的資料

熱點內容
mindmaplinux 瀏覽:733
oppo手機怎麼連接電腦傳輸數據 瀏覽:624
word刪除章節附註分隔符 瀏覽:773
公告質疑需要哪些文件 瀏覽:608
資料庫模型是干什麼的 瀏覽:404
win10的驅動怎麼安裝驅動 瀏覽:320
word文件水印怎麼取消 瀏覽:443
rhel6的鏡像文件在哪裡下載 瀏覽:571
成功正能量微信頭像 瀏覽:848
wps表格如何恢復數據 瀏覽:264
linuxc靜態庫創建 瀏覽:838
u盤有微信文件但微信恢復不了 瀏覽:585
蘋果的網站數據是什麼 瀏覽:22
ps滾字教程 瀏覽:237
win7網路鄰居如何保存ftp 瀏覽:186
安卓客戶端代理伺服器 瀏覽:572
編程用蘋果 瀏覽:659
51虛擬機的文件管理在哪裡 瀏覽:13
win10系統有沒有便簽 瀏覽:722
java引用傳遞和值傳遞 瀏覽:109

友情鏈接