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

C# 获取不存在的文件夹名称的最佳方法是什么?,c#,directory,C#,Directory,获取包含我可以确定不存在的文件夹名称的字符串的最佳方法是什么?也就是说,如果我为给定路径调用DirectoryInfo.Exists,它应该返回false 编辑:其背后的原因是我正在为错误检查器编写一个测试,错误检查器测试路径是否存在,因此我大声想知道获得不存在的路径的最佳方法。好的,一个好的选择是将用户名、今天的日期和时间等字符串连接到毫秒 不过我很好奇:你为什么要这么做?它应该是干什么用的?好吧,如果不创建目录,您可以确定的是,它在几微秒前并不存在。以下是一种可能足够接近的方法:

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


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

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


不过我很好奇:你为什么要这么做?它应该是干什么用的?

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

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

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

实际上没有任何方法可以精确地执行您想要执行的操作。如果你仔细想想,你会发现即使在对DirectoryInfo.Exists的调用返回false之后,其他一些程序也可能会继续创建这个目录——这是一个竞争条件


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

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

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

我认为您可以非常接近:

        string path = Path.GetTempFileName();
        File.Delete(path);
        Directory.CreateDirectory(path);
字符串directoryName=Guid.NewGuid.ToSrtring


由于Guid是相当随机的,您不应该得到两个相同的dir。

在名称空间中使用新生成的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中去掉字符-它们生成合法的文件名

您是否需要一些随机名称,例如临时文件夹?否则我就得不到你想要的东西:这会得到一个临时文件夹的路径,但是如果krolley想要一些持久的东西,这就行不通了。没错,但是如果没有更多的上下文,很难知道这是好是坏。事实上,我喜欢jop的Guid建议——如果我能修复我的openid,我会修改它-pAFAIK,在Windows中,现在有一种方法可以在单个原子事务中包装多个操作。所以这个问题确实没有绝对的答案。我们只有“足够好”的答案。让你怀疑是否有那么多机器人回答这些简单快捷的问题:马特认为乔普实际上是一个机器人;“相当随机”是描述Guid的一种方式,我想。。。我想这取决于你希望你的系统运行的宇宙中有多少生命!guid是否包含任何非法字符?我只是看了一眼,看起来不像。