如何知道目录是否可写?

Mel*_* NG 0 c#

我正在制作一个自定义的 SaveFileDialog。

这是一个目录:

C:\Windows\System32\0409
Run Code Online (Sandbox Code Playgroud)

它可读但不可写。

我通常使用这种方式来了解它是否可读:

    foreach (string i in Directory.GetDirectories(@"C:\Windows\System32\", "*", new EnumerationOptions { IgnoreInaccessible = true }))
    {
    ////
    }
Run Code Online (Sandbox Code Playgroud)

但是,这种方式无法获取是否可写。

当程序将文件写入不可写目录时,会抛出以下错误:

System.UnauthorizedAccessException
  HResult=0x80070005
  Message=Access to the path 'C:\Windows\System32\0409\' is denied.
  Source=System.IO.FileSystem
  StackTrace:
   at System.IO.FileSystem.CreateDirectory(String fullPath, Byte[] securityDescriptor)
   at System.IO.Directory.CreateDirectory(String path)
   at CoolDuck.Dialogs.Extract.<Window_Loaded>b__26_0() in G:\SampleProject\Test.xaml.cs:line 128
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.<>c.<.cctor>b__277_0(Object obj)
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
Run Code Online (Sandbox Code Playgroud)

我不想用 atry&catch来解决这个问题。我不认为这是正确的方法。

我该如何解决这个问题?谢谢你。

Oli*_*ver 6

文件 IO 总是大量使用 try/catch。因为即使您检查 ACL 权限并决定可以写入,系统也可能在您开始之前更改 ACL,并且您遇到了无论如何都必须处理的权限异常。