我想创建一个像这样的简单目录树,尽管它不需要具有相同的名称
我是否需要像这样写:
Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/");
Directory.CreateDirectory("/home/XXX/Documents/Users/Juan");
有没有选项可以在同一个字符串路径中创建“Pepe”和“Juan”?
答案 0 :(得分:4)
要发布答案并提供替代方案,如果您只想使用CreateDirectory
方法,则可以使用参数params string[]
的方法并传入目录在调用方法时。
代码看起来像这样
private static void CreateDirectories(params string[] directories)
{
foreach (string directory in directories)
{
Directory.CreateDirectory(directory);
}
}
您可以使用
进行调用CreateDirectories("/home/XXX/Documents/Users/Pepe/datos/", "/home/XXX/Documents/Users/Juan");
或者你可以传入一个字符串数组
CreateDirectories(new [] { "/home/XXX/Documents/Users/Pepe/datos/", "/home/XXX/Documents/Users/Juan"});
我减少了执行上述操作的System.IO
方法的用法,然后我接口允许我创建模拟的类,然后对我创建的软件进行单元测试而不执行I / O操作,这带来了一个场景你可以使用上面的内容,除非它不是静态的。
答案 1 :(得分:2)
BCL没有任何东西可以做到这一点;你必须为每个人打电话CreateDirectory
。
如果你有一组目录路径,你可以把它放在循环中:
foreach (string dirPath in directoryPaths)
{
Directory.CreateDirectory(dirPath);
}
答案 2 :(得分:1)
听起来你有一个共同的根目录:
<?php
date_default_timezone_set("UTC");
echo $timestamp = date('Y-m-d');
echo " - ";
echo $daysInMonth = (int)date('t', $timestamp);
echo " - ";
echo $thisDayInMonth = (int)date('j', $timestamp);
echo " - ";
echo $daysRemaining = $daysInMonth - $thisDayInMonth;
?>
并且您想从那里添加子目录。如果是这种情况,如果目标是只需要引用子目录,那么我会采用@ColinM&#39的方法,但稍微修改它如下:
/home/XXX/Documents/Users
现在当你打电话时,你只需要提一下根
private static void CreateDirectories(string directoryRoot, params string[] directories)
{
foreach (string directory in directories)
{
Directory.CreateDirectory(Path.Combine(directoryRoot, directory));
}
}
关于CreateDirectories("/home/XXX/Documents/Users", "Pepe/datos/", "Juan");
的好处是你不必担心斜杠Path.Combine
要么落后/
要么导致任何{ {1}} - 它将确保最终格式化正确。
当然,如果你采用这种方法,你需要决定如果directoryRoot
为空会发生什么 - 你是否创建了directoryRoot(假设它已经不在那里),你抛出一个错误,还是只是回来?
答案 3 :(得分:0)
你可以创建像。
System.IO.Directory.CreateDirectory( “C:/方向1 /方向2 / DIR3”);
认为c:drive的根目录中没有Dir1。
它将像Dir1 - &gt; Dir2 - &gt; Dir3一样创建文件夹结构。
如果Die1在那里,那么它将创建子目录的其余部分。
多级相同。