自动创建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
posted @ 2016-05-27 11:06  shansong.huang  阅读(1463)  评论(0编辑  收藏  举报