你的位置:首页 > 操作系统

[操作系统]自动创建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