16

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

4

6 回答 6

22
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>

于 2010-10-27T19:21:56.553 回答
17
string somepath = @"z:/root/test/thing1/thing2/file.txt";
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName( ( somepath ) );
于 2010-10-27T19:20:33.093 回答
8
Directory.CreateDirectory("/root/...") 

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

于 2010-10-27T19:21:50.827 回答
4

检查IO 命名空间DirectoryPath),我想他们会帮助你

using System.IO

然后检查它..

string fileName =@"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName);
if (!Directory.Exists(directory))
    Directory.CreateDirectory(directory);
于 2010-10-27T19:21:17.503 回答
1
string filename = "c:\\temp\\wibble\\wobble\\file.txt";
string dir = Path.GetDirectoryName(filename);
if (!Directory.Exists(dir))
{
    Directory.CreateDirectory(dir);
}
File.Create(filename);

当然,有适当的异常处理。

于 2010-10-27T19:24:42.240 回答
0

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

例子:

var defaultLocation = "z:/";
Directory.SetCurrentDirectory(defaultLocation);
Directory.SetCurrentDirectory(AppContext.BaseDirectory);
于 2017-06-30T14:38:09.203 回答