获取不存在的文件夹名称的最佳方法是什么?

时间:2008-09-29 08:24:56

标签: c# directory

获取包含文件夹名称的字符串的最佳方法是什么?我可以确定存在?也就是说,如果我为给定路径调用DirectoryInfo.Exists,它应该返回false。

编辑:背后的原因是我正在为错误检查器编写测试,错误检查器测试路径是否存在,所以我想知道获取不存在的路径的最佳方法。

8 个答案:

答案 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);