获取包含文件夹名称的字符串的最佳方法是什么?我可以确定存在?也就是说,如果我为给定路径调用 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是相当随机的,你不应该得到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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top