获取包含文件夹名称的字符串的最佳方法是什么?我可以确定不存在?也就是说,如果我为给定路径调用DirectoryInfo.Exists
,它应该返回false。
答案 0 :(得分:9)
在GUID之后命名 - 只取出非法字符。
答案 1 :(得分:6)
没有任何方法可以按照您想要的方式做到。如果你考虑一下,你会看到即使在调用DirectoryInfo.Exists
之后返回false,其他一些程序也可以继续创建目录 - 这是竞争条件。
处理此问题的常规方法是创建一个新的临时目录 - 如果创建成功,那么在创建它之前就知道它不存在。
答案 2 :(得分:5)
好吧,没有创建目录,你可以肯定的是它几微秒前就不存在了。这是一种可能足够接近的方法:
string path = Path.GetTempFileName();
File.Delete(path);
Directory.CreateDirectory(path);
请注意,这会创建阻止线程竞争的目录(即从您下面窃取目录的另一个进程/线程)。
答案 3 :(得分:4)
我最终使用的是:
using System.IO;
string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
(另外,你似乎不需要从guid中删除字符 - 它们会生成合法的文件名)
答案 4 :(得分:0)
嗯,一个好的选择是连接字符串,如用户名,今天的日期和时间,直到毫秒。
我很好奇:你为什么要这样做?它应该是什么?
答案 5 :(得分:0)
这是创建一个临时文件夹还是什么?我经常使用Guid.NewGuid来获取一个字符串,用于您希望确定不存在的文件夹名称。
答案 6 :(得分:0)
我认为你可以足够接近:
string directoryName = Guid.NewGuid.ToSrtring();
由于Guid是相当随机的,你不应该得到2个dirs。
答案 7 :(得分:0)
在名称空间中使用新生成的GUID也是有点独特的(例如,应用程序/产品的名称)应该可以获得您想要的结果。例如,以下代码极不太可能失败:
string ParentPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "MyAppName");
string UniquePath = System.IO.Path.Combine(ParentPath, Guid.NewGuid().ToString());
System.IO.Directory.CreateDirectory(UniquePath);