溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發(fā)布時間:2020-06-18 09:55:17 來源:網(wǎng)絡 閱讀:6852 作者:geoff1314 欄目:編程語言

方法1. access函數(shù)

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

        頭文件:   #include < io.h>

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

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

        

        函數(shù)參數(shù)說明:

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

        mode

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

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

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

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

        返回值:

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

        

        錯誤代碼:

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

        EROFS: 欲測試寫入權限的文件存在于只讀文件系統(tǒng)內(nèi).

        EFAULT:參數(shù)pathname指針超出可存取內(nèi)存空間.

        EINVAL:參數(shù)mode 不正確.

        ENAMETOOLONG:參數(shù)pathname太長.

        ENOTDIR:參數(shù)pathname為一目錄.

        ENOMEM:核心內(nèi)存不足

        ELOOP: 參數(shù)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函數(shù)

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

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

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

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

    

    函數(shù)參數(shù)說明:

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

    mode

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

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

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

    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>

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

    函數(shù)說明:建立一個文件夾

    返回值:創(chuàng)建成功則返回0,否則返回-1


方法3. FindFirstFile函數(shù)

    適用范圍:windows平臺

    頭文件: #include "windows.h"

    函數(shù)原型:

    __out HANDLEWINAPI FindFirstFileW(

        __in  LPCWSTR lpFileName,

        __outLPWIN32_FIND_DATAW lpFindFileData);

    

    __outHANDLE WINAPI FindFirstFileA(

        __in  LPCSTR lpFileName,

        __outLPWIN32_FIND_DATAW lpFindFileData);

    函數(shù)說明:檢查文件或文件夾是否存在

#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函數(shù)

    適用范圍:MFC項目

頭文件: #include <shlwapi.h>

函數(shù)原型:

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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI