• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

VC目录操作小结

VC/MFC/Windows 弦苦 2546次浏览 0个评论

一.判断一个目录是否存在

#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创建多层目录

VC递归创建目录


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明VC目录操作小结
喜欢 (0)

您必须 登录 才能发表评论!

加载中……