我之所以这样问是因为如果任何底层文件或文件夹是ReadOnly,.NET会将文件夹视为ReadOnly。因此,这段代码:
if (!Properties.Settings.Default.searchReadOnly &&
(diPath.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
writeable = false;
始终将writeable设置为false。
如果您需要知道根文件夹是否为ReadOnly,则会出现此问题。 My Docments文件夹不是ReadOnly,但这是属性窗口中显示的内容:
任何帮助都将不胜感激。
修改
我试图接近你的建议,但是文档似乎仍然设置了ReadOnly标志。
if (!Properties.Settings.Default.searchReadOnly &&
diPath.Attributes.HasFlag(FileAttributes.ReadOnly)) // == true
searchable = false;
这怎么可能?用户执行代码的是什么?我假设主动登录用户?再说一遍,假设因为我可以写入Documents文件夹,它就不能设置ReadOnly标志。
答案 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
,这意味着状态从未改变过,而且它是默认状态。
此状态表示只读
<强>更新强> 如果你有一些标记为只读的子文件夹,你的根文件夹将被标记为只读。
因此,尝试此检查并以只读方式应用于您的文件夹,而不是取消选中并应用,您将看到不再标记为只读
答案 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