自动创建WIN32下多级子目录的C++封装类
这是 WIN32 自动创建多级子目录的 C++ 封装类,用法简单。
封装没有采用类的静态函数方式,而是在构造函数里面直接完成工作。没什么具体的原因,只是当时做成这样了,这么多年就一直这样用了。
#ifndef __HSS_AUTO_CREATE_FOLDER_HSS__ #define __HSS_AUTO_CREATE_FOLDER_HSS__ #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") /**************************************************************************************************\ 自动创建目录 方法: char* pszFile.. char* pszPath... auto_folder af(pszFile); //自动建立文件pszFile所在的目录 auto_folder af(pszPath); //自动建立目录pszPath
如下用法,均创建目录 c:\\tmp\\sel
auto_folder af("C:\\temp\\sel");
auto_folder af("C:\\temp\\sel\\1.jpg");
auto_folder af("C:\\temp\\sel\\");
参数如何区分目录和文件: 如果最后有\\肯定是目录 如果最后又后缀".",则肯定是文件 如果最后没有\\,也没有后缀'.",则认为是路径 \**************************************************************************************************/ class auto_folder { public: auto_folder(LPCTSTR pszPath) { //如果后面有\\则是路径,如果没有,但有后缀,则是文件,无后缀则也是路径 char szPath[_MAX_PATH] = {0}; strncpy(szPath, pszPath,_MAX_PATH); szPath[_MAX_PATH-1] = 0; char* pdot = strrchr(szPath, '.'); char* psp = strrchr(szPath, '\\'); if (psp && pdot && pdot > psp) { //文件方式,去掉文件名 psp[0] = 0; } else { //缺省是个目录,这个地方可能吧没有后缀的文件当作目录 } PathAddBackslash(szPath); if (PathIsDirectory(szPath)) return; psp = strchr(szPath, '\\'); while(psp) { *psp = 0; if (!PathIsDirectory(szPath)) { if (!CreateDirectory(szPath, 0)) return; } *psp = '\\'; psp = strchr(psp + 1, '\\'); } }; }; #endif