C# 如何检查是否可以在特定文件夹中创建文件

C# 如何检查是否可以在特定文件夹中创建文件,c#,.net,permissions,filesystems,C#,.net,Permissions,Filesystems,我需要知道是否可以在特定文件夹中创建文件,但需要检查的内容太多,例如权限、重复文件等。 我正在寻找类似File.CanCreate(@“C:\myfolder\myfile.aaa”)的东西,但还没有找到这样的方法。 我唯一想到的是尝试创建一个虚拟文件并检查异常,但这是一个笨拙的解决方案,也会影响性能。 您知道更好的解决方案吗?实际上,在大多数应用程序中,创建虚拟文件不会对性能产生巨大影响。当然,如果您具有“创建但不销毁”的高级权限,它可能会有点麻烦 GUI对于随机名称总是很方便(以避免冲突)-

我需要知道是否可以在特定文件夹中创建文件,但需要检查的内容太多,例如权限、重复文件等。 我正在寻找类似
File.CanCreate(@“C:\myfolder\myfile.aaa”
)的东西,但还没有找到这样的方法。 我唯一想到的是尝试创建一个虚拟文件并检查异常,但这是一个笨拙的解决方案,也会影响性能。
您知道更好的解决方案吗?

实际上,在大多数应用程序中,创建虚拟文件不会对性能产生巨大影响。当然,如果您具有“创建但不销毁”的高级权限,它可能会有点麻烦

GUI对于随机名称总是很方便(以避免冲突)-例如:

string file = Path.Combine(dir, Guid.NewGuid().ToString() + ".tmp");
// perhaps check File.Exists(file), but it would be a long-shot...
bool canCreate;
try
{
    using (File.Create(file)) { }
    File.Delete(file);
    canCreate = true;
}
catch
{
    canCreate = false;
}
您可以使用验证是否没有.NET策略(caspol)限制在该位置创建和写入文件

但这不包括windows策略。您必须手动检查NTFS策略。即使这样,也有一些进程可以决定不允许您创建文件(例如病毒扫描程序)


最好、最完整的方法是尝试。

但是请注意,检查是否可以创建文件(无论如何创建),然后在以后实际创建文件,仍然可能会产生错误(此处有竞态条件)。因此,通常最好首先创建(最终)文件并处理可能出现的错误/异常。你是对的,但我提供这些信息供以后使用,我只负责提供这些信息,如果之后权限发生变化,将抛出另一种错误。我希望这样做时不会出现中断调试的异常(我可以告诉VS“隐藏”它,但我不希望这样)。有办法吗?