如何找出目录本身是否是ReadOnly而不是底层文件

时间:2015-04-23 09:42:47

标签: c# wpf permissions

我之所以这样问是因为如果任何底层文件或文件夹是ReadOnly,.NET会将文件夹视为ReadOnly。因此,这段代码:

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

始终将writeable设置为false。

如果您需要知道根文件夹是否为ReadOnly,则会出现此问题。 My Docments文件夹不是ReadOnly,但这是属性窗口中显示的内容:

My Documents properties

任何帮助都将不胜感激。

修改

我试图接近你的建议,但是文档似乎仍然设置了ReadOnly标志。

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

这怎么可能?用户执行代码的是什么?我假设主动登录用户?再说一遍,假设因为我可以写入Documents文件夹,它就不能设置ReadOnly标志。

2 个答案:

答案 0 :(得分:1)

这应该有帮助

use the System.IO.DirectoryInfo class:

var di = new DirectoryInfo(folderName);

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

}

但是

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

此状态表示只读

enter image description here

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

因此,尝试此检查并以只读方式应用于您的文件夹,而不是取消选中并应用,您将看到不再标记为只读

答案 1 :(得分:0)

我找到了解决方案。

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