2015-04-23 83 views
0

我问这个问题的原因是因为如果任何底层文件或文件夹是ReadOnly,.NET会将文件夹视为ReadOnly。因此,此代码:如何找出目录本身是只读而不是底层文件

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

总是要将写入设置为false。

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

My Documents properties

任何帮助,将不胜感激。

编辑

我试图接近你的建议,但文档仍似乎有只读标志设置。

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

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

+1

这个SO线程应该帮助:[链接](http://stackoverflow.com/questions/7511592/check-if-folder-is-read-only-in -c-net) – sszarek

+0

谢谢@sszarek,这很有帮助! – DerpyNerd

回答

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我一直在寻找:D

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

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

那么试试这个检查,应用在只读文件夹不是取消选中并应用,你会看到,没有更多的标记为只读

+0

感谢您的信息,我现在就试试:) – DerpyNerd

+0

我更新了我的问题以反映您的建议。 – DerpyNerd

+0

@RobbieVercammen看到我的更新回答 –

相关问题