【问题标题】:How to find out if a directory itself is ReadOnly instead of underlying files如何确定目录本身是否为只读而不是底层文件
【发布时间】:2015-07-01 09:53:13
【问题描述】:

我之所以问这个问题是因为如果任何基础文件或文件夹是只读的,.NET 将文件夹视为只读。为此代码:

if (!Properties.Settings.Default.searchReadOnly &&
    (diPath.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
    writeable = false;

总是将 writeable 设置为 false。

如果您需要知道根文件夹是否为只读,这是一个问题。 我的文档文件夹不是只读的,但这是属性窗口中显示的内容:

任何帮助将不胜感激。

编辑

我试图接近您的建议,但 Documents 似乎仍然设置了 ReadOnly 标志。

if (!Properties.Settings.Default.searchReadOnly &&
    diPath.Attributes.HasFlag(FileAttributes.ReadOnly)) // == true
    searchable = false;

这怎么可能?什么用户正在执行代码?我假设主动登录的用户?同样,假设因为我可以写入 Documents 文件夹,所以它不能设置 ReadOnly 标志。

【问题讨论】:

  • 这个 SO 线程应该有帮助:link
  • 谢谢@sszarek,这很有帮助!

标签: c# wpf permissions


【解决方案1】:

这应该有帮助

use the System.IO.DirectoryInfo class:

var di = new DirectoryInfo(folderName);

if(di.Exists())
{
  if (di.Attributes.HasFlag(FileAttributes.ReadOnly))
  {
    //IsReadOnly...
  }

}

但是

这个状态并不意味着只读它的意思是null state,这意味着状态从未改变,它是默认状态。

这个状态意味着只读

更新 如果您有一些子文件夹被标记为只读,您的根文件夹将被标记为只读。

所以试试这个检查并以只读方式应用到你的文件夹,而不是取消选中并应用,你会看到它不再被标记为只读

【讨论】:

  • 我更新了我的问题以反映您的建议。
  • 可能是这样,但我不能要求最终用户应用此解决方案。必须有另一种方式。我会继续寻找。
  • 在这种情况下,您应该对所有文件和子文件夹进行递归迭代,并使它们不是只读的
【解决方案2】:

我找到了解决办法。

var writePermissionSet = new PermissionSet(PermissionState.None);
writePermissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Write, path));

if (!Properties.Settings.Default.searchReadOnly &&
    !writePermissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))
    //diPath.Attributes.HasFlag(FileAttributes.ReadOnly))
    searchable = false;

这并不能真正确认该目录的 ReadOnly 标志,但它确实向我保证用户在该目录中没有写入权限。这有点像我一直在寻找的 ReadOnly :D

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 2011-04-17
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多