c# - 如何知道目录是否可写?
问题描述
我正在制作一个自定义 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
来解决这个问题。我不认为这是正确的方法。
我该如何解决这个问题?谢谢你。
解决方案
文件 IO 总是大量使用 try/catch。因为即使您检查了 ACL 权限并决定您可以写入,系统也可能在您开始之前更改 ACL,并且您遇到了您必须处理的权限异常。
推荐阅读
- javascript - 如何使用按钮使用 JavaScript 对数组进行计数?
- angular - 可观察数组 *ngFor 指令 Angular
- amazon-dynamodb - 如何在 dynamodb 中获取总行数?
- asp.net-mvc - 为什么我要使用异步而不是非异步方法
- alexa - 如何在 Alexa 技能中获得金钱/货币价值?
- php - 如何从 PHP 函数返回变量本身而不是返回值?
- scala - Scala - 如何仅对列表中的某些元素进行映射而不使用过滤器?
- python - 打印多项式的导数 - python
- android - Android GridView 计算背景颜色不均匀
- python - 为什么在 Flask python 中使用 get 方法时出现错误