获取不存在的文件夹名称的最佳方法是什么?
时间: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中去除字符)