C或C++或WinApi中是否有任何功能来创建目录,包括指定路径中所有不存在的目录
Are there any function in C or C++ or WinApi to create directory including all unexistent directories in specified path?
我需要 c# 的模拟
Directory.CreateDirectory("d:\asd\dsa\123");
这将创建所有这些目录,即使磁盘 D 完全为空,没有任何目录。
接下来我读了WinApi CreateDirectory:
"ERROR_PATH_NOT_FOUND - 一个或多个中间目录不存在;此函数只会在路径中创建最终目录。所以这不是我想要的。
还有其他方法可以做我想做的事吗?
您是否尝试使用mkdir()
函数?另一种使用方式:
-
提升文件系统:支持标准MAX_PATH大小 260。
const char dir_path[] = "c:\temp\cplusplus";
boost::filesystem::path dir(dir_path); if(boost::filesystem::create_directory(dir)) { std::cout << "Success" << "n"; }
-
SHCreateDirectoryEx 函数用于 Win XP(SP2) 和高等。但是,它限制为 247 个字符,这小于其他 Win32 API 文件系统函数支持的标准MAX_PATH (260)
- 创建目录函数:路径的默认字符串大小限制为 248 个字符。此限制与 CreateDirectory 函数解析路径的方式有关。若要将此限制扩展到宽字符
32,767
,请调用函数的 Unicode 版本,并在路径前面附加"\?"
前缀。
注意: 由于大多数 Boost.Filesystem 操作函数只是将类路径对象的内容传递给 Windows API,因此它们确实使用扩展长度的前缀。但是有些不起作用,因为Windows施加的限制。- 增强警告。
检查您的特定编译器供应商是否为此目的提供了自己的 RTL 函数。 例如,Delphi/C++Builder 有一个可用的ForceDirectories()
函数。
好吧,在Perl/Ruby/Bash中,你会,
`/bin/mkdir -p $pathname` #perl
%x(/bin/mkdir -p #{pathname}) #ruby
/bin/mkdir -p $pathname #bash
所以你可以唤起系统,
system("mkdir -p pathname");
添加:
好吧,您想将给定的路径分成几部分并制作每个部分。 在 C 语言中很容易做到(将 char* 和 char[] 更改为 std::string,对于 c++,strcat 更改为 +=),
int MakeDir( char* pathname )
{
struct stat sbuf;
if( stat(pathname, &sbuf) < 0 )
{
mkdir(pathname,0); //set your permissions as you like in 2nd argument
return(0);
}
else //exists? skip
{
//stat.st_mode tells file or dir
if( S_ISDIR(stat.st_mode) ) { return(0); }
else if( S_ISREG(stat.st_mode) ) { return(-1); }
else if( S_ISFIFO(stat.st_mode) ) { return(-1); }
else if( S_LNK(stat.st_mode) ) { return(0); } //can link to dir
else { return(-1); }
}
return(0);
};
////char PATHSEP = "/"; //unix/linux //not needed, just use 'mkdir -p'
char PATHSEP = "\"; //windows
int MkdirPath( char *pathname )
{
char parts = strdup(pathname);
char buildpath[strlen(pathname)] = "";
char* part = strtok(parts,PATHSEP);
while ( part )
{
strcat(pathname, PATHSEP); strcat(pathname, part);
if( MakeDir( pathname ) < 0 ) { break; }
part = strtok(NULL,PATHSEP);
}
return(0);
};
相关文章:
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- g++ 说函数不存在,即使包含正确的标头
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 查找第一个数组中不存在的元素
- 查找不存在的键时,unordered_map返回什么
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- set::find 查找不存在的元素
- 有没有办法将字符串添加到 Vector 中,但前提是它尚不存在?->C++
- inet_ntop返回不存在的地址
- CPP 使用不存在的键访问映射
- 为什么QMediaGaplessPlaybackControl不存在?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 标记未定义的颜色,并且颜色匹配系统中不存在样品
- openCV 库调用不存在的本地路径
- 如果路径的每个元素不存在,请为其创建一个目录
- 错误53:找不到文件,而是路径中存在所有DLL
- C或C++或WinApi中是否有任何功能来创建目录,包括指定路径中所有不存在的目录
- 将相对路径转换为完整路径的系统功能,即使对于不存在的路径也适用