如何确定目录本身是否为 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
我问这个问题的原因是,如果任何底层文件或文件夹是只读的,.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