如何确定目录本身是否为 ReadOnly 而不是底层文件

How to find out if a directory itself is ReadOnly instead of underlying files

我问这个问题的原因是,如果任何底层文件或文件夹是只读的,.NET 会将文件夹视为只读。为此代码:

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

总是将 writeable 设置为 false。

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

如有任何帮助,我们将不胜感激。

编辑

我尝试按照您的建议进行处理,但 Documents 似乎仍设置了 ReadOnly 标志。

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

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

这应该有帮助

use the System.IO.DirectoryInfo class:

var di = new DirectoryInfo(folderName);

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

}

但是

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

此状态表示只读

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

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

我找到了解决方案。

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 :D