我想创建一个简单的目录树,就像这个一样,虽然它不需要具有相同的名称。
我需要这样写吗:
Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/");
Directory.CreateDirectory("/home/XXX/Documents/Users/Juan");
有没有办法在同一个字符串路径中创建“Pepe”和“Juan”?
我想创建一个简单的目录树,就像这个一样,虽然它不需要具有相同的名称。
我需要这样写吗:
Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/");
Directory.CreateDirectory("/home/XXX/Documents/Users/Juan");
如果您只想使用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操作。这种情况下,您可以使用上述方法之一,但它将不是静态的。没有内置到BCL中完成这个操作的方法;你需要为每一个目录调用CreateDirectory
方法。
如果你有一组目录路径,你可以将其放在循环内部:
foreach (string dirPath in directoryPaths)
{
Directory.CreateDirectory(dirPath);
}
。
/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
或任何一个 directories
中有一个斜杠 /
,它会确保最终格式正确,同时保留 HTML 标签。当然,如果你采用这种方法,你需要决定如果 directories
为空会发生什么--是否创建 directoryRoot
(假设它不存在),抛出错误还是只返回空值。你可以创建像这样的。
System.IO.Directory.CreateDirectory("c:/Dir1/Dir2/Dir3");
在C盘根目录下似乎没有Dir1文件夹。
它将创建文件夹结构,例如Dir1-->Dir2-->Dir3。
如果Die1存在,则会创建其余的子目录。
对于多级别也是如此。