這是 WIN32 自動創建多級子目錄的 C++ 封裝類,用法簡單。 封裝沒有採用類的靜態函數方式,而是在構造函數裡面直接完成工作。沒什麼具體的原因,只是當時做成這樣了,這麼多年就一直這樣用了。 #ifndef lxx_hss_auto_create_folder_hss #define __HSS_... ...
這是 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