从长路径自动创建目录

时间:2010-10-27 19:16:04

标签: c# asp.net file file-io create-directory

我有一组具有完全限定路径的文件(root / test / thing1 / thing2 / file.txt)。我希望foreach覆盖此集合并将文件放入路径中定义的位置,但是,如果某些目录不存在,我希望它们能够自动创建。我的程序有一个默认的“放置位置”,例如z:/。 “放置位置”从空开始,因此在上面的示例中,第一个项应自动创建创建z:/root/test/thing1/thing2/file.txt所需的目录。我怎么能这样做?

6 个答案:

答案 0 :(得分:18)

foreach (var relativePath in files.Keys)
{
    var fullPath = Path.Combine(defaultLocation, relativePath);
    var directory = Path.GetDirectoryName(fullPath);

    Directory.CreateDirectory(directory);

    saveFile(fullPath, files[relativePath]);
}

文件为IDictionary<string, object>

答案 1 :(得分:13)

string somepath = @"z:/root/test/thing1/thing2/file.txt";
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName( ( somepath ) );

答案 2 :(得分:7)

Directory.CreateDirectory("/root/...") 

创建指定路径中的所有目录和子目录

答案 3 :(得分:4)

检查IO namespaceDirectoryPath),我认为他们会帮助您

using System.IO

然后检查..

string fileName =@"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName);
if (!Directory.Exists(directory))
    Directory.CreateDirectory(directory);

答案 4 :(得分:1)

string filename = "c:\\temp\\wibble\\wobble\\file.txt";
string dir = Path.GetDirectoryName(filename);
if (!Directory.Exists(dir))
{
    Directory.CreateDirectory(dir);
}
File.Create(filename);

当然有适当的异常处理。

答案 5 :(得分:0)

我发现在执行开始时设置“默认位置”是有帮助的并减少一些冗余代码(例如Path.Combine(defaultLocation, relativePath))。

示例:

var defaultLocation = "z:/";
Directory.SetCurrentDirectory(defaultLocation);
Directory.SetCurrentDirectory(AppContext.BaseDirectory);