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