如何获得一个文件夹名称的字符串,以确保该文件夹不存在?也就是说,如果我对给定路径调用DirectoryInfo.Exists
,它应该返回false。
编辑:原因是我正在为错误检查器编写测试,错误检查器测试路径是否存在,因此我想知道获取不存在的路径的最佳方法。
将其命名为GUID - 只需删除非法字符即可。
实际上没有一种方法可以精确地做到你想做的事情。如果你仔细思考,你会发现即使在调用DirectoryInfo.Exists
返回false之后,其他程序仍然可能会创建目录 - 这是一种竞争条件。
处理这种情况的常规方法是创建一个新的临时目录 - 如果创建成功,则知道它以前不存在。
如果没有创建目录,你只能确定它在几微秒前不存在。这里有一种可能足够接近的方法:
string path = Path.GetTempFileName();
File.Delete(path);
Directory.CreateDirectory(path);
using System.IO;
string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
此外,似乎不需要从GUID中去除字符-它们生成合法的文件名。
嗯,一个好的选择是将字符串连接起来,例如用户名、今天的日期和毫秒级时间。
不过我很好奇:你为什么想要这样做?它应该是用来做什么的呢?
这是用来创建临时文件夹还是其他什么?我经常使用Guid.NewGuid来获取一个字符串,用于文件夹名称,以确保它不存在。
我认为你可以足够接近:
string directoryName = Guid.NewGuid.ToSrtring();
由于Guid相当随机,因此您不应该得到两个相同的目录。
在命名空间中使用新生成的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);