程序很简单,适合参考,还有
/*!
给出路径创建文件,
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;
}