Linux-C++
header:
#ifndef TESTFUN_PATH_TOOL_H__
#define TESTFUN_PATH_TOOL_H__
namespace pathtool {
bool CreateMultiLevelPath(const char *path);
int CreatePathIfNoExist(const char *path);
};
#endif
cpp:
#include "path_tool.h"
#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif
#include <string>
using namespace std;
int pathtool::CreatePathIfNoExist(const char* path)
{
if (0 == access(path, F_OK))
return 0;
#ifdef WIN32
return mkdir(path);
#else
return mkdir(path, 0777);
#endif
return 0;
}
bool pathtool::CreateMultiLevelPath(const char *path)
{
if (0 == CreatePathIfNoExist(path))
return true;
string targt_path = path;
int pre_split = 0;
size_t path_len = targt_path.length();
for (size_t i = 0; i < path_len; ++i){
if ('/' != targt_path[i] && '\\' != targt_path[i])
continue;
char old_char = targt_path[i];
targt_path[i] = '\0';
if (0 != CreatePathIfNoExist(targt_path.c_str()))
return false;
targt_path[i] = old_char;
}
return 0 == CreatePathIfNoExist(path);
}
Golang
func IsFileExist(fileName string) (bool, bool) {
s, err := os.Stat(fileName)
if err != nil {
return false, false
}
return true, s.IsDir()
}
//暂时发现创建路径仅能创建一级,如果多级目录会创建失败
//增加多级目录创建
func CreateFoler(path string) bool {
isExist, isDir := IsFileExist(path)
if isExist && isDir {
return true
}
subPath := strings.Split(path, "/")
fullPath := ""
for _, iter := range subPath {
if len(iter) <= 0 {
continue
}
fullPath += "/" + iter
isExist, isDir := IsFileExist(fullPath)
if isExist && !isDir {
return false
}
if isExist {
continue
}
err := os.Mkdir(fullPath, os.ModePerm)
if err != nil {
return false
}
}
return true
}