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

时间:2020-03-06 14:51:56  来源:igfitidea点击:

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

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

解决方案

好吧,一个不错的选择是将字符串连接起来,例如用户名,今天的日期和时间(以毫秒为单位)。

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

好吧,无需创建目录,我们可以确定的是它在几微秒前就不存在。这是一种可能足够接近的方法:

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

请注意,这将创建目录以阻止线程争用(即另一个进程/线程从我们下方窃取了该目录)。

确实没有任何方法可以精确地完成我们想做的事情。如果我们考虑一下,我们会发现即使对DirectoryInfo.Exists的调用返回false之后,其他某些程序也可能继续运行并创建了目录,这是一种竞争条件。

正常的处理方法是,如果创建成功,则创建一个新的临时目录,然后我们便知道该目录在创建之前就不存在。

以GUID命名,只需取出非法字符即可。

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

我认为我们可以足够接近:

字符串directoryName = Guid.NewGuid.ToSrtring();

由于Guid的随机性很强,因此我们不应该获得2个dirs。

在还有些独特的名称空间(例如,应用程序/产品的名称)中使用新生成的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);

我最终使用的是:

using System.IO;

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

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