一、判断文件是否存在
- #ifdef WIN32
- #include <io.h> //C (Windows) access
- #else
- #include <unistd.h> //C (Linux) access
- #endif
- #include <fstream> //C++ fstream
- #ifdef WIN32
- #include <Windows.h> //Windows API FindFirstFile
- #include <Shlwapi.h>
- #pragma comment(lib, "shlwapi.lib") //Windows API PathFileExists
- #endif
- #include <boost/filesystem.hpp> //boost
- using namespace std;
- int main()
- {
- char file_name[] = "D://aa.txt";
- //C run in windows and linux
- if ( 0 == access(file_name, 0) ) cout<<"access(): file exist."<<endl;
- else cout<<"access(): file not exist."<<endl;
- //C++ run in windows and linux
- fstream fs;
- fs.open(file_name, ios::in);
- if (fs) cout<<"fstream: file exist."<<endl;
- else cout<<"fstream: file not exist."<<endl;
- fs.close();
- //Windows API run in windows
- #ifdef WIN32
- WIN32_FIND_DATA wfd;
- HANDLE hFind = FindFirstFile(file_name, &wfd);
- if ( INVALID_HANDLE_VALUE != hFind ) cout<<"FindFirstFile: file exist."<<endl;
- else cout<<"FindFirstFile: file not exist."<<endl;
- CloseHandle(hFind);
- if ( PathFileExists(file_name) ) cout<<"PathFileExists: file exist."<<endl;
- else cout<<"PathFileExists: file not exist."<<endl;
- if ( INVALID_FILE_ATTRIBUTES != GetFileAttributes(file_name) ) cout<<"GetFileAttributes: file exist."<<endl;
- else cout<<"GetFileAttributes: file not exist."<<endl;
- if ( INVALID_HANDLE_VALUE != CreateFile(file_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL) ) cout<<"CreateFile: file exist."<<endl;
- else cout<<"CreateFile: file not exist."<<endl;
- #endif
- //boost run in windows and linux
- boost::filesystem::path path_file(file_name);
- if ( boost::filesystem::exists(path_file) &&
- boost::filesystem::is_regular_file(path_file) ) cout<<"boost: file exist."<<endl;
- else cout<<"boost: file not exist."<<endl;
- return 0;
- }
二、判断目录是否存在
- #ifdef WIN32
- #include <io.h> //C (Windows) access
- #else
- #include <unistd.h> //C (Linux) access
- #endif
- #ifdef WIN32
- #include <Windows.h> //Windows API FindFirstFile
- #include <Shlwapi.h>
- #pragma comment(lib, "shlwapi.lib") //Windows API PathFileExists
- #endif
- #include <boost/filesystem.hpp> //boost
- using namespace std;
- int main()
- {
- char file_name[] = "D://b";
- //C run in windows and linux
- if ( 0 == access(file_name, 0) ) cout<<"access(): path exist."<<endl;
- else cout<<"access(): path not exist."<<endl;
- //Windows API run in windows
- #ifdef WIN32
- WIN32_FIND_DATA wfd;
- HANDLE hFind = FindFirstFile(file_name, &wfd);
- if ( INVALID_HANDLE_VALUE != hFind && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) cout<<"FindFirstFile: path exist."<<endl;
- else cout<<"FindFirstFile: path not exist."<<endl;
- CloseHandle(hFind);
- if ( PathFileExists(file_name) ) cout<<"PathFileExists: path exist."<<endl;
- else cout<<"PathFileExists: path not exist."<<endl;
- if ( INVALID_FILE_ATTRIBUTES != GetFileAttributes(file_name) ) cout<<"GetFileAttributes: path exist."<<endl;
- else cout<<"GetFileAttributes: path not exist."<<endl;
- #endif
- //boost run in windows and linux
- boost::filesystem::path path_file(file_name);
- if ( boost::filesystem::exists(path_file) &&
- boost::filesystem::is_directory(path_file) ) cout<<"boost: path exist."<<endl;
- else cout<<"boost: path not exist."<<endl;
- return 0;
- }
三、几种方式比较
1. 精确判断文件和目录的
FindFirstFile() (Windows API, Windows)
boost (boost, Windows and Linux)
2. 不精确判断文件盒目录的
access() (C , Windows and Linux)
PathFileExists() (Windows API , Windows)
GetFileAttributes() (Windows API, Windows)
3. 只能判断文件的
fstream (C++ STL, Windows and Linux)
CreateFile() (Windows API, Windows)
转自:http://blog.csdn.net/guowenyan001/article/details/17259173