首页 > 解决方案 > 如何知道目录是否可写?

问题描述

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

这是一个目录:

C:\Windows\System32\0409

它可读但不可写。

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

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

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

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

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)

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

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

标签: c#

解决方案


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


推荐阅读