3

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

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

4

8 回答 8

9

以 GUID 命名 -只需去掉非法字符。

于 2008-09-29T08:29:48.387 回答
6

没有任何方法可以精确地按照您想要的方式做。如果您考虑一下,您会发现即使在调用DirectoryInfo.Exists返回 false 之后,其他一些程序也可能继续创建目录 - 这是一个竞争条件。

处理此问题的常规方法是创建一个新的临时目录 - 如果创建成功,那么您就知道它在创建之前不存在。

于 2008-09-29T08:29:12.867 回答
5

好吧,如果不创建目录,您可以确定的是它在几微秒前并不存在。这是一种可能足够接近的方法:

        string path = Path.GetTempFileName();
        File.Delete(path);
        Directory.CreateDirectory(path);

请注意,这会创建目录以阻止线程竞争(即另一个进程/线程从您下面窃取目录)。

于 2008-09-29T08:28:10.450 回答
4

我最终使用的是:

using System.IO;

string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

(此外,您似乎不需要从 guid 中删除字符 - 它们会生成合法的文件名)

于 2008-09-29T09:13:13.963 回答
0

好吧,一个不错的选择是将用户名、今天的日期和时间等字符串连接到毫秒。

不过我很好奇:你为什么要这样做?它应该是为了什么?

于 2008-09-29T08:27:53.680 回答
0

这是创建一个临时文件夹还是什么?我经常使用 Guid.NewGuid 来获取一个字符串,用于您想要确定的文件夹名称不存在。

于 2008-09-29T08:31:04.953 回答
0

我认为你可以足够接近:

字符串目录名 = Guid.NewGuid.ToSrtring();

由于 Guid 是相当随机的,你不应该得到 2 个相同的目录。

于 2008-09-29T08:32:13.063 回答
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);
于 2008-09-29T08:32:57.833 回答