1. 程式人生 > >(二) C/C++中判斷文件或文件夾是否存在

(二) C/C++中判斷文件或文件夾是否存在

c/c++ 文件 文件夾 存在

方法1. access函數

適用範圍:所有C/C++項目

頭文件: #include < io.h>

函數原型: intaccess(const char *filename, int mode);

函數說明:判斷是否具有存取文件的權限

函數參數說明:

filename:可以填寫文件夾路徑或者文件路徑

mode

F_OK (0): 判斷該文件/文件夾是否存在;

R_OK (2): 判斷該文件/文件夾是否有讀權限;

W_OK (

4): 判斷該文件/文件夾是否有寫入權限;

X_OK (6): 判斷該文件/文件夾是否有執行權限;

返回值:

若存在或者具有權限,返回值為0;不存在或者無權限,返回值為-1,並把錯誤代碼存在errno (errno.h中定義)

錯誤代碼:

EACCESS:參數pathname所指定的文件不符合所要求測試的權限.

EROFS: 欲測試寫入權限的文件存在於只讀文件系統內.

EFAULT:參數pathname指針超出可存取內存空間.

EINVAL:參數mode 不正確

.

ENAMETOOLONG:參數pathname太長.

ENOTDIR:參數pathname為一目錄.

ENOMEM:核心內存不足

ELOOP: 參數pathname 有過多符號連接問題.

EIO I/O:存取錯誤.

#include <stdio.h>

#include <io.h>

int main(int argc, const char** argv)

{

char* filePath = "C://Users//Public//Downloads" ;

if (_access(filePath,0) == -1)

{

printf("The file/dir doesn‘t exisit");

}

else

{

printf("Exisit ");

}

return 0;

}


方法2. fopen函數

適用範圍:所有C/C++項目

頭文件: #include<stdio.h> #include<fstream>

函數原型: FILE *fopen(const char * path, const char * mode);

函數說明:判斷是否具有存取文件的權限

函數參數說明:

filename:可以填寫文件夾路徑或者文件路徑

mode

r : 以只讀方式打開文件,該文件必須存在。

r+ : 以可讀寫方式打開文件,該文件必須存在。

w : 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。

a: 以附加的方式打開只寫文件。

b: 二進制文件。

返回值:

文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno (errno.h中定義)

用於判斷文件是否存在可以使用 r 或者 rb ,返回值為NULL,說明打不開或不存在。但用這種方法做出的判斷是不完全正確的,因為有的文件存在,但是可能不可讀

#include <stdio.h>

//#include<fstream>

int main(int argc, const char** argv)

{

char* filePath = "C://Users//Public//Downloads" ;

FILE *fp=NULL;

fp = fopen(filePath,"r");//只供讀取

if (fp == NULL)

{

printf("The file/dir doesn‘t exisit");

}

else

{

printf("Exisit ");

}

fclose(fp);//關閉文件

fp=NULL;//需要指向空,否則會指向原打開文件地址

return 0;

}


擴展. 建一個文件夾

頭文件: #include<direct.h>

函數原型: int _mkdir(const char *path,mode_t mode);

函數說明:建立一個文件夾

返回值:創建成功則返回0,否則返回-1


方法3. FindFirstFile函數

適用範圍:windows平臺

頭文件: #include "windows.h"

函數原型:

__out HANDLEWINAPI FindFirstFileW(

__in LPCWSTR lpFileName,

__outLPWIN32_FIND_DATAW lpFindFileData);

__outHANDLE WINAPI FindFirstFileA(

__in LPCSTR lpFileName,

__outLPWIN32_FIND_DATAW lpFindFileData);

函數說明:檢查文件或文件夾是否存在

#include <stdio.h>

#include "windows.h"

int main(int argc, const char** argv)

{

WIN32_FIND_DATA wfd ;

HANDLE hFind;

WCHAR *filePath = L"C://Users//Public//Downloads";

hFind = FindFirstFile(filePath, & wfd );

//判斷文件

if (hFind == INVALID_HANDLE_VALUE)

{ printf ("Invalid File Handle. Get Last Error reports %d ", GetLastError()); }

else

{

printf ("The first file found is %s ", wfd .cFileName);

FindClose(hFind);

}

//判斷文件夾

if (hFind != INVALID_HANDLE_VALUE &&(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))

{

printf ("The first file found is %s ", wfd.cFileName);

FindClose(hFind);

}

else

{ printf ("Invalid File Handle. Get Last Error reports %d ", GetLastError()); }

return (0);

}


方法4. PathFileExists函數

適用範圍:MFC項目

頭文件: #include <shlwapi.h>

函數原型:

LWSTDAPI_(BOOL) PathFileExistsA(__in LPCSTR pszPath);

或:

LWSTDAPI_(BOOL) PathFileExistsW(__in LPCWSTR pszPath);

參考:

http://blog.csdn.net/roger_77/article/details/1538447

http://blog.csdn.net/gneveek/article/details/6848473

http://blog.csdn.net/xhhjin/article/details/6369336


本文出自 “荊棘鳥” 博客,請務必保留此出處http://geoff.blog.51cto.com/1319603/1924957

(二) C/C++中判斷文件或文件夾是否存在