winform中在遍历子文件夹下,循环遍历子文件夹中的文件时提示该子文件夹没有访问权限!怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform中在遍历子文件夹下,循环遍历子文件夹中的文件时提示该子文件夹没有访问权限!怎么解决?相关的知识,希望对你有一定的参考价值。

winform中在遍历子文件夹下,循环遍历子文件夹中的文件时提示该子文件夹没有访问权限!怎么解决?我想解决的思路方向是,在遍历子文件夹下的循环(此循环是遍历子文件的)中判断该子文件夹是否有访问权限,没有访问权限就跳出该循环一次,有访问权限就继续。
我还想解决,遍历子文件夹中的子文件夹,并遍历子文件夹中的子文件夹中的文件,以此内推(比如F:/a/b/c/d/e/f,一直无线的)。

要先调试看一下究竟哪些文件夹没权限。另外,编译好的exe用管理员方式运行,看是否仍然没有权限。另外我也看过你对楼上的追问,他先说管理员运行没有错,不失为一个办法,而且C#程序可以做到必须以管理员身份运行。如果上面的你觉得都不符合,那我可以告诉你用try catch就可以跳过。追问

我的程序在运行中已经有对话框提示错误,报出没有访问权限的文件夹名称和路径了!

你说的跟我想解决的,完全不沾边!

我的程序根本不用,试看!如果都像你说的还要试看,那我写这程序还有什么意义

追答

你懂不懂什么叫try catch?可以按文件try catch 也可以按整个递归try catch,你不懂还这么不谦虚?我百度C#排名第一采纳数都是几千。

追问

你不要跟我探究什么,try catch,我只想解决,我的问题!如果你不要想告诉我,或者不懂,请便!

追答

给钱解决。

追问

请便!

我不喜欢,在回答我的问题时,你的答案,跟我的问题是不相关的。哪怕关系度为1%也好啊!可是你呢?你好好反复阅读我的问题及扩充问题去吧!

我从来不接受,不阅读我问题的人的答案的

追答

谁管你喜不喜欢啊。你有多重要啊?

追问

你的第一个回答中说试看,哪些文件夹没有访问权限,但是我说过并不用试看,因为我已知,哪些文件夹没有访问权限!

所以现在只需要用代码写出,一个判断,判断没权限跳出,判断有权限继续!

我就是不知道这判断如何写!

追答

我第一次回答就清清楚楚地说了。

追问

我最后说一遍!
你的第一个回答中说试看,哪些文件夹没有访问权限,但是我说过并不用试看,因为我已知,哪些文件夹没有访问权限!
所以现在只需要用代码写出,一个判断,判断没权限跳出,判断有权限继续!
我就是不知道这判断如何写!

你说什么了?你说试看啊!
我也说清楚了啊,我已知,没有访问权限的文件夹和路径!

我需要在遍历子文件夹时判断子的访问权限,这判断的代码如何组成呢?

说话啊

喂,你把人家,弄生气了,还想跑?

追答

那你举个例子哪个文件夹没权限,自己的系统怎么可能没权限?

追问

拍照吧

追答

可以。

追问

等等,摄像头卡了

好了!

删了点照片

追答

知道了 这个是系统文件夹,与之前我设想的类似。
然后截图你的遍历文件夹的主要代码段。

追问

第一张是错误的提示

怎么解决?

追答

把你的递归调用那个NANEQ2()移动到try的上面试试。

追问

我希望用判断能够解决!

NAMEQ2里面写的就是try啊

追答

http://stackoverflow.com/questions/1281620/checking-for-directory-and-file-write-permissions-in-net
http://stackoverflow.com/questions/1410127/c-sharp-test-if-user-has-write-access-to-a-folder
http://stackoverflow.com/questions/3456397/checking-file-folder-access-permission

追问

??

你直接给我一段最简单的判断代码不就得了

我这边是手机打不开

nameq2方法里面是返回子目录

出错的代码是tmp那一段

代码没有错

追答

这就叫饭来张口,衣来伸手。

追问

你直接给我吧

追答

你是大爷!

追问

我的程序就在这最关键的地方给我卡住了,

要是能够跳过访问没有访问权限的文件夹,我的程序就算是解决了他的主流功能和最大的功能了!

我想过,和查询过很多资料(书本,网络),最好的思路就是判断,也是最常用的。但是就是没有查到那关联的代码源。

if(这中间这什么?)else

可是我就是不知道

谢谢了如果告诉我我真的感激不尽!

你就帮帮一个弱女子吧,我已经日夜未眠了!

追答

采纳我这个答案然后再向我提问。就给你写具体代码。

追问

我的程序其他所有功能都会写,但是这一点,不写成!我就无法测试,我的其他功能就不知GBU在何处了!

好的把带那段给我吧!

判断的整段代码啊!

喂喂喂喂喂

参考技术A 单点右键,然后点获得管理员所有权限。追问

我说的是winform

我在写程序

我不是要获取访问权限,我是要跳过访问,直接访问下一个子文件夹

我写的程序是要在其他任何一台电脑上能够运行的

问题中我已经把我想要解决的思路说的很明白了!

使用VBA循环遍历所有子文件夹[重复]

【中文标题】使用VBA循环遍历所有子文件夹[重复]【英文标题】:Loop Through All Subfolders Using VBA [duplicate] 【发布时间】:2014-05-03 22:21:18 【问题描述】:

我正在寻找一个将遍历指定文件夹的所有子文件夹的 VBA 脚本。当我说所有子文件夹时,我的意思是指定文件夹中的每个文件夹,其中的每个文件夹,以及其中的每个文件夹......理论上可能有无限的嵌套子文件夹,但实际上它可能不会超过 3或 4. 我正在使用 VBA Scripting Runtime 对象,因此一旦我循环进入文件夹,我就可以检查一些文件的属性(但我知道如何做这部分)。

感谢您的帮助!

这道题不同于前面题目中列出的“相似”题中包含已知目录的问题,而这里的需要是查找已知目录和未知目录。还需要多层子目录。你们真的应该在启动“重复”之前阅读问题。

【问题讨论】:

这里有很多关于 SO 的例子——你试过搜索吗? Cycle through sub-folders and files in a user-specified root directory 和 get list of subdirs in vba 的可能重复项 它类似于 simoco 发布的内容,但是在该示例中似乎有一个列表,而这里的子文件夹一开始是未知的 - 脚本需要找到它们。谢谢。 是的,我尝试过搜索,但无济于事。谢谢你的建议。 【参考方案1】:

只是一个简单的文件夹向下钻取。

sub sample()
    Dim FileSystem As Object
    Dim HostFolder As String

    HostFolder = "C:\"

    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    DoFolder FileSystem.GetFolder(HostFolder)
end  sub

Sub DoFolder(Folder)
    Dim SubFolder
    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder
    Next
    Dim File
    For Each File In Folder.Files
        ' Operate on each file
    Next
End Sub

【讨论】:

谢谢,我觉得这很简单! 没问题,所有程序员都会时不时地保留这个子文件夹迭代的副本,它主要是复制和粘贴。不要忘记标记我的朋友的答案。 为了完整起见,在下面添加了非递归方法;) 你忘记定义什么了吗?不适合我:( 我猜你不能仅仅使用 SubFolder 作为变体。它需要 Dim SubFolder as Object【参考方案2】:

为了补充 Rich 的递归答案,一种非递归方法。

Public Sub NonRecursiveMethod()
    Dim fso, oFolder, oSubfolder, oFile, queue As Collection

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder("your folder path variable") 'obviously replace

    Do While queue.Count > 0
        Set oFolder = queue(1)
        queue.Remove 1 'dequeue
        '...insert any folder processing code here...
        For Each oSubfolder In oFolder.SubFolders
            queue.Add oSubfolder 'enqueue
        Next oSubfolder
        For Each oFile In oFolder.Files
            '...insert any file processing code here...
        Next oFile
    Loop

End Sub

您可以将队列用于 FIFO 行为(如上所示),或者您可以将堆栈用于 LIFO 行为,其处理顺序与递归方法相同(将 Set oFolder = queue(1) 替换为 Set oFolder = queue(queue.Count) 并替换 queue.Remove(1)使用queue.Remove(queue.Count),并可能重命名变量...)

【讨论】:

+1 这真是太糟糕了。我需要阅读更多关于收藏的内容。 @Rich 会的,但其他 2 个已存储在集合中,然后我们在接下来的 2 个循环中处理(不要忘记 queue.Remove 1 删除第一个文件夹,所以第二个文件夹是现在是集合的第一个成员,因此在下一次调用 queue(1) 时检索。堆栈方法将采用相反的方式,始终对添加的最后一个文件夹进行操作(将 queue(1) 替换为 queue(queue.Count)和 queue.Remove 1 with queue.Remove queue.Count)。 集合在 VBA 中非常有用,因为它们基本上是我们唯一的“列表”类型的对象(键控字典也可以从 Scripting.Runtime 中使用)。您可以在处理某些内容时轻松使用它们添加结果,然后担心在最后进入数组(节省使用 Redim 保留每个循环的数组复制开销)。您可以使用它们来查找唯一性、映射值、对大量数据进行快速查找以及许多其他事情。 我想指出的是,如果处理顺序对您很重要,则此方法不会给出与递归方法相同的顺序。这里的文件夹处理顺序是这样的:Root,Root\Sub1,Root\Sub2,Root\Sub1\Sub1.1,Root\Sub1\Sub1.2,Root\Sub2\Sub2.1,Root\Sub2\Sub2.2... 也就是逐级处理文件夹。 @Lapis 好点。可以通过使用堆栈而不是队列以非递归方式获得相同的顺序(因此,而不是x = queue(1): queue.remove 1,它将类似于x = queue(queue.count): queue.remove(queue.count)

以上是关于winform中在遍历子文件夹下,循环遍历子文件夹中的文件时提示该子文件夹没有访问权限!怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

bat命令遍历文件夹下指定后缀的文件但不包括子文件夹

solidworks 二次开发 如何遍历文件夹下所有子文件的文件?

php写一个函数,能够遍历一个文件夹下的所有文件和子文件夹

delphi 7 superobject控件如何遍历子对象

循环遍历文件夹和子文件夹中工作簿中的工作表

尝试遍历子文件夹中的子文件夹和文件