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


本文地址: http://blog.youkuaiyun.com/caroline_wendy/article/details/21734915


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

由于属于系统层, 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.h> windows系统函数, 判断文件夹是否存在;

代码:

#include <iostream> #include <string>  #include <windows.h>  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 <io.h>

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

代码:

#include <iostream> #include <string>  #include <io.h>  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; }