一.判断一个目录是否存在
#include <io.h> #include <tchar.h> // szPath末尾无斜杠 bool isFolderExist(TCHAR *szFolderPath) { bool exist = true; // false; _tfinddata_t fd; // WIN32_FIND_DATA long hFind = _tfindfirst(szFolderPath, &fd); // FindFirstFile if((hFind==-1) && (errno==ENOENT)) // ERROR_PATH_NOT_FOUND(3) { exist = false; } else { _findclose(hFind); } /* if (hFind && (fd.attrib&_A_SUBDIR)) { exist = true; _findclose(hFind); // FindClose } */ return exist; }
二.判断一个文件路径(包含绝对路径和文件名)是否存在
// 方法一:尝试打开文件法,返回错误码,则说明不存在。 #include <tchar.h> bool isFileExist(LPCTSTR szAbsFullPath/*TCHAR *szAbsFullPath*/) { bool exist = true; // (1)fopen法 #include <stdio.h> #include <errno.h> FILE *pFile = _tfopen(szAbsFullPath, “r”); if((pFile==NULL) && (errno==ENOENT)) { exist = false; } else { fclose(pFile); } /* // (2)_open法 #include <fcntl.h> #include <io.h> #include <errno.h> int fh = _topen(szAbsFullPath, _O_RDONLY); if ((fh==-1) && (errno==ENOENT)) { exist = false; } else { _close(fh); } */ /* // (3)CreateFile法 // #include <WinBase.h> // #include <WinError.h> #include <Windows.h> HANDLE hFile = CreateFile(szAbsFullPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if ((hFile==INVALID_HANDLE_VALUE) && ((GetLastError()==ERROR_PATH_NOT_FOUND) || (GetLastError()==ERROR_FILE_NOT_FOUND)) { exist = false; } else { CloseHandle(hFile); } */ /* // (4)MFC CFile.Open法 #include <afx.h> CFileException e; CFile f; if(f.Open(szAbsFullPath, CFile::modeRead, &e) == 0) { if ((e.m_cause==CFileException::badPath) || (e.m_cause==CFileException::fileNotFound)) { exist = false; } } else { f.Close(); } */ return exist; } // 方法二:文件属性访问法 #include <tchar.h> bool isFileExist(LPCTSTR szAbsFullPath/*TCHAR *szAbsFullPath*/) { bool exist = true; // (1)_access法 #include <io.h> #include <errno.h> if ((_taccess(szAbsFullPath, 0)==-1) && (errno==ENOENT)) { exist = false; } /* // (2)GetFileAttributes法 // #include <WinBase.h> // #include <WinError.h> #include <Windows.h> DWORD attr = GetFileAttributes(szAbsFullPath); if ((attr==INVALID_FILE_ATTRIBUTES) && ((GetLastError()==ERROR_PATH_NOT_FOUND) || (GetLastError()==ERROR_FILE_NOT_FOUND))) { exist = false; } */ return exist; } // 方法三:查找文件法 bool isFileExist(LPCTSTR szAbsFullPath) { bool exist = true; // (1) WIN32_FIND_DATA法 // #include <WinBase.h> // #include <WinError.h> #include <Windows.h> WIN32_FIND_DATA wfd; HANDLE hFile = FindFirstFile(szAbsFullPath, &wfd); if ((hFile==INVALID_HANDLE_VALUE) && ((GetLastError()==ERROR_PATH_NOT_FOUND) || (GetLastError()==ERROR_FILE_NOT_FOUND))) { exist = false; } else { FindClose(hFile); } /* // (2)MFC CFileFind.FindFile法 #include <afx.h> CFileFind finder; exist = finder.FindFile(szFullPath); */ return exist; } // 方法四:Windows Utility API查询法 #include <Shlwapi.h> #pragma comment(lib, “Shlwapi.lib”) BOOL isFileExist(LPCTSTR szAbsFullPath) { return PathFileExists(szAbsFullPath); }
三.创建目录(待续)
参考:
《VC创建多层目录》
《VC递归创建目录》