C语言C++ 依路径创建目录或文件

 程序很简单,适合参考,还有

代码截取于 miniunz.c 的另一个函数

/*!
给出路径创建文件,
2022-03-06
  */

#include <string>
#include <fstream>
#ifdef _WIN32
# include <direct.h>
# include <io.h>
#else
# include <unistd.h>
# include <utime.h>
#endif

/**
 * @brief pathConvert_Single2Double  斜杠转换 ‘/’转为‘\\’
 * @param s
 */
inline void pathConvert_Single2Double ( std::string& s )
{
    std::string::size_type pos = 0;
    while ( ( pos = s.find('/', pos) ) !=  std::string::npos )
    {
        s.replace( pos, 1,"\\" );
        pos = pos + 2;
    }
}

/**
 * @brief pathConvert_Double2Single  斜杠转换 ‘\\’转为‘/’
 * @param s
 */
inline void pathConvert_Double2Single ( std::string& s )
{
    std::string::size_type pos = 0;
    while ( ( pos = s.find('\\', pos) ) !=  std::string::npos )
    {
        s.replace( pos, 1,"/" );
        pos = pos + 2;
    }
}

/**
 * @brief mkpath 创建路径,
 * @param path 路径最后是斜杠为目录,否则最后是文件,最后的文件不会创建
 * @return 成功返回true
 */
inline bool mkpath(const std::string path)
{
    int ret=0;
    std::string::size_type pos =0;
    std::string tempStr(path);
    std::string forler;

    pathConvert_Single2Double ( tempStr );

    while ( ( pos = tempStr.find('\\', pos) ) !=  std::string::npos )
    {
        forler =  tempStr.substr( 0, pos);
        ret = ::mkdir( forler.data() );
        if(!ret)
            return false;
#ifdef unix
        ret = ::chmod( forler.data(), 777 );
        if(!ret)
            return false;
#endif
        pos = pos + 1;
    }
    return true;
}

/**
 * @brief mkfile 创建路径和空白文件,如果文件存在不会清空
 * @param path 路径最后是斜杠为目录,否则最后是文件,最后的文件不会创建
 * @return 存在或成功返回true, 路径最后不是文件返回false
 */
inline bool mkfile(const std::string path)
{
    bool ret=0;
    std::string::size_type pos =0;
    std::string tempStr(path);
    std::string forler;

    pathConvert_Single2Double ( tempStr );

    if ( mkpath(tempStr) )
    {
        std::FILE fp;
        std::fstream f( tempStr, std::ios_base::out | std::ios_base::binary );
        ret = f.is_open();
        f.close();

        return ret ;
    }

    return false;
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值