以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  filesys与权限  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=137355)

--  作者:lur320
--  发布时间:2019/7/4 9:42:00
--  filesys与权限
在使用filesys的功能浏览文件夹内的文件清单。有些文件夹由于客户端的权限不能访问。此时系统会报错而停止。
有什么功能判断是否有权限读取文件夹?
有权限再继续,没权限就跳过该文件夹?

--  作者:lur320
--  发布时间:2019/7/4 10:02:00
--  
除了try,有没有更明确的方法知道是权限不对才跳过的?
--  作者:有点蓝
--  发布时间:2019/7/4 10:04:00
--  
试试

Dim dirPath = "E:\\问题"
Dim dir As New system.io.DirectoryInfo(dirPath)
Dim ds As new System.Security.AccessControl.DirectorySecurity(dirPath , System.Security.AccessControl.AccessControlSections.Access)
msgbox(ds.AreAccessRulesProtected) \'true为有权限控制,false表示没有权限控制,可以读写

--  作者:lur320
--  发布时间:2019/7/4 10:08:00
--  
还有一个问题。如何判断文件夹里面还有子文件夹?


--  作者:lur320
--  发布时间:2019/7/4 10:12:00
--  
算了,用递归来找。自己写了
--  作者:lur320
--  发布时间:2019/7/4 10:18:00
--  
这个好像不行。
---------------------------
版本:2018.9.9.1
---------------------------
代码执行出错,错误信息:



System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.

   at System.Security.AccessControl.Win32.GetSecurityInfo(ResourceType resourceType, String name, SafeHandle handle, AccessControlSections accessControlSections, RawSecurityDescriptor& resultSd)

   at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)

   at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)

   at System.Security.AccessControl.DirectorySecurity..ctor(String name, AccessControlSections includeSections)

   at UserCode.Test()
---------------------------
OK   
---------------------------


--  作者:有点蓝
--  发布时间:2019/7/4 10:25:00
--  
贴出完整代码看看
--  作者:lur320
--  发布时间:2019/7/4 10:26:00
--  
Dim dirPath = "************olete"
Dim dir As New system.io.DirectoryInfo(dirPath)
Dim ds As new System.Security.AccessControl.DirectorySecurity(dirPath , System.Security.AccessControl.AccessControlSections.Access)
Output.show(ds.AreAccessRulesProtected) \'true为有权限控制,false表示没有权限控制,可以读写

--  作者:lur320
--  发布时间:2019/7/4 10:26:00
--  
我在命令窗口里面测试的
--  作者:有点蓝
--  发布时间:2019/7/4 10:37:00
--  
试试

Dim dirPath = "E:\\问题"
Dim fileAcl = system.io.Directory.GetAccessControl(dirPath )
Dim userAccessRules = fileAcl.GetAccessRules(True, True, Gettype(System.Security.Principal.NTAccount))
For Each ff As object In userAccessRules
    If ff.AccessControlType = System.Security.AccessControl.AccessControlType.Deny Then
        msgbox("没有权限")
        Exit For
    End If
Next
msgbox("有权限")
[此贴子已经被作者于2019/7/4 14:32:28编辑过]