判断文件夹(folder)是否存在(exist)

写入程序, 需要在文件夹中写入数据, 如果文件夹不存在, 则无法写入, 在程序入口需要判断;

由于属于系统层, Windows的两种解决方法.

参考: http://stackoverflow.com/questions/8233842/how-to-check-if-directory-exist-using-c-and-winapi
1. GetFileAttributesA()函数

DWORD d = GetFileAttributesA(const char* filename); #include
windows系统函数, 判断文件夹是否存在;

代码:

#include 
#include 
     
#include 
     
using namespace std;  
     
bool dirExists(const std::string& dirName_in)  
{  
   DWORD ftyp = GetFileAttributesA(dirName_in.c_str());  
   if (ftyp == INVALID_FILE_ATTRIBUTES)  
       return false;  //something is wrong with your path!  
     
   if (ftyp & FILE_ATTRIBUTE_DIRECTORY)  
       return true;   // this is a directory!  
     
   return false;    // this is not a directory!  
}  
     
int main(void)  
{  
   std::string folder("./Test");  
     
   if (dirExists(folder)) {  
       std::cout << "Folder : " << folder << " exist!" << std::endl;  
   } else {  
       std::cout << "Folder : " << folder << " doesn't exist!" << std::endl;  
   }  
     
   std::string nofolder("./TestNo");  
     
   if (dirExists(nofolder)) {  
       std::cout << "Folder : " << nofolder << " exist!" << std::endl;  
   } else {  
       std::cout << "Folder : " << nofolder << " doesn't exist!" << std::endl;  
   }  
     
   return 0;  
}


2. _access()函数

int access(const char *filename, int mode); #include

mode设为0, 判断文件是否存在; 返回0, 文件存在;

代码:

#include 
#include 
     
#include 
     
using namespace std;  
     
bool dirExists(const std::string& dirName_in)  
{  
   int ftyp = _access(dirName_in.c_str(), 0);  
     
   if (0 == ftyp)  
       return true;   // this is a directory!  
   else
       return false;    // this is not a directory!  
}  
     
int main(void)  
{  
   std::string folder("./Test");  
     
   if (dirExists(folder)) {  
       std::cout << "Folder : " << folder << " exist!" << std::endl;  
   } else {  
       std::cout << "Folder : " << folder << " doesn't exist!" << std::endl;  
   }  
     
   std::string nofolder("./TestNo");  
     
   if (dirExists(nofolder)) {  
       std::cout << "Folder : " << nofolder << " exist!" << std::endl;  
   } else {  
       std::cout << "Folder : " << nofolder << " doesn't exist!" << std::endl;  
   }  
     
   return 0;  
}


上一篇: COM原理及应用----可连接对象

下一篇: 虚继承(virtual inheritance) 详解

分享到: 更多