首页 > 代码库 > 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。