首页 > 代码库 > C/C++中判断某一文件或目录是否存在

C/C++中判断某一文件或目录是否存在

 1 //1.C++很简单的一种办法: 2 #include <iostream> 3 #include <fstream> 4 using namespace std; 5 #define FILENAME "stat.dat" 6 int main() 7 { 8      fstream _file; 9      _file.open(FILENAME,ios::in);10      if(!_file)11      {12          cout<<FILENAME<<"没有被创建";13       }14       else15       {16           cout<<FILENAME<<"已经存在";17       }18       return 0;19 }
2.利用 c 语言的库的办法: 函数名: access 功  能: 确定文件的访问权限 用  法: int access(const char *filename, int amode); 以前一直没用过这个函数,今天调试程序发现了这个函数,感觉挺好用,尤其是判断一个文件或文件夹是否存在的时候,用不着再find了,文件的话还可以检测读写权限,文件夹的话则只能判断是否存在,下面摘自MSDN:int _access( const char *path, int mode );Return ValueEach 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, errno is 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 _access function determines whether the specified file exists and can be accessed as specified by the value of mode. When used with directories, _access determines only whether the specified directory exists; in Windows NT, all directories have read and write access.mode Value            Checks File For 00                              Existence only 02                              Write permission 04                              Read permission 06                              Read and write permission 
 1 //Example 2 /* ACCESS.C: This example uses _access to check the * file named "ACCESS.C" to see if it exists and if * writing is allowed. */ 3 #include  <io.h> 4 #include  <stdio.h> 5 #include  <stdlib.h> 6 void main( void ) 7 {   8      /* Check for existence */    9      if( (_access( "ACCESS.C", 0 )) != -1 )   10      {      printf( "File ACCESS.C exists " );     11            /* Check for write permission */     12            if( (_access( "ACCESS.C", 2 )) != -1 )         13           printf( "File ACCESS.C has write permission " );   14      }15 }16 17 /*18 Output19 File ACCESS.C existsFile ACCESS.C has write permission 20 */
 1 //3.在windows平台下用API函数FindFirstFile(...): 2  3 //(1)检查文件是否存在: 4 #define _WIN32_WINNT 0x0400 5  6 #include "windows.h" 7  8 int main(int argc, char *argv[]) 9 {10   WIN32_FIND_DATA FindFileData;11   HANDLE hFind;12 13   printf ("Target file is %s. ", argv[1]);14 15   hFind = FindFirstFile(argv[1], &FindFileData);16 17   if (hFind == INVALID_HANDLE_VALUE) {18     printf ("Invalid File Handle. Get Last Error reports %d ", GetLastError ());19   } else {20     printf ("The first file found is %s ", FindFileData.cFileName);21     FindClose(hFind);22   }23 24   return (0);25 }
 1 ///2目录是否存在的检查: 2 bool  CheckFolderExist(const string &strPath) 3 { 4     WIN32_FIND_DATA  wfd; 5     bool rValue = http://www.mamicode.com/false; 6     HANDLE hFind = FindFirstFile(strPath.c_str(), &wfd); 7     if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 8     { 9         rValue = http://www.mamicode.com/true;   10     }11     FindClose(hFind);12     return rValue;13 }
 1 //4.使用boost的filesystem类库的exists函数 2 #include <boost/filesystem/operations.hpp> 3 #include <boost/filesystem/path.hpp> 4 #include <boost/filesystem/convenience.hpp> 5  6 int GetFilePath(std::string &strFilePath) 7 { 8     string strPath; 9     int nRes = 0;10 11     //指定路径            12     strPath = "D:/myTest/Test1/Test2";13     namespace fs = boost::filesystem;14 15     //路径的可移植16     fs::path full_path( fs::initial_path() );17     full_path = fs::system_complete( fs::path(strPath, fs::native ) );18     //判断各级子目录是否存在,不存在则需要创建19     if ( !fs::exists( full_path ) )20     {21         // 创建多层子目录22         bool bRet = fs::create_directories(full_path);23         if (false == bRet)24         {25             return -1;26         }27 28     }29     strFilePath = full_path.native_directory_string();30 31     return 0;32 }