Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以同时创建两个子目录吗?_C#_Create Directory - Fatal编程技术网

C# 我可以同时创建两个子目录吗?

C# 我可以同时创建两个子目录吗?,c#,create-directory,C#,Create Directory,我想创建一个像这样的简单目录树,尽管它不需要有相同的名称 我需要这样写吗: Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/"); Directory.CreateDirectory("/home/XXX/Documents/Users/Juan"); 有没有在同一个字符串路径中创建“Pepe”和“Juan”的选项?没有,BCL中没有任何东西可以这样做;您必须为每个人调用CreateDirectory 如果有目录

我想创建一个像这样的简单目录树,尽管它不需要有相同的名称

我需要这样写吗:

Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/");
Directory.CreateDirectory("/home/XXX/Documents/Users/Juan");

有没有在同一个字符串路径中创建“Pepe”和“Juan”的选项?

没有,BCL中没有任何东西可以这样做;您必须为每个人调用
CreateDirectory

如果有目录路径集合,可以将其放入循环中:

foreach (string dirPath in directoryPaths)
{
    Directory.CreateDirectory(dirPath);
}

要发布答案并提供替代方案,如果您只想使用一次
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操作的情况下对我创建的软件进行单元测试,这带来了一种场景,在这种场景中,您可以使用上述方法,除非它不是静态的

听起来您有一个公共根目录:

/home/XXX/Documents/Users
您想从那里添加子目录。如果是这种情况,并且目标是只引用子目录,那么我将使用@ColinM的方法,但稍微修改一下,如下所示:

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
的好处在于,您不必担心斜杠
/
会在
目录根
中尾随,或者在任何
目录
中前导——它最终会确保格式正确

当然,如果采用这种方法,您需要确定如果
目录
为空会发生什么情况——您是创建directoryRoot(假设它不在那里)、抛出错误还是返回?

您可以像这样创建

System.IO.Directory.CreateDirectory(“c:/Dir1/Dir2/Dir3”)

认为在c:drive的根上没有Dir1

它将创建类似于Dir1-->Dir2-->Dir3的文件夹结构

若Die1在那个里,那个么它将创建子目录的其余部分


多个级别也一样。

没有。但是你的方式有什么问题吗?@MarioDS——那么,家庭作业不是只针对那些希望为他们编写代码的人吗?谁在乎这是不是一个“家庭作业”问题?如果人们在整个大学期间都不被允许问任何问题,那么他们该如何学习?@ColinM——别担心,在家庭作业上寻求帮助本来没有什么错。我看到像马里奥兹这样的人总是这样评论。问题是,他们只是把作业问题扔到那里,没有其他什么问题,期望人们为他们做作业。@VictorMAnuelLimaDelgado--+1来自我,伙计。我认为这是一个好问题。但我认为人们之所以喜欢你,可能是因为“缺乏研究努力”。我认为这是站不住脚的;你是否应该总是说“我在谷歌上搜索了这个,却找不到答案”?那对我来说似乎是多余的。