Vb.net 如何避免访问被拒绝(仅检查文件名)

Vb.net 如何避免访问被拒绝(仅检查文件名),vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,所以我这里有一个非常基本的问题。。。我们有一个依赖于xml文件存储设置的应用程序。偶尔此文件会损坏,应用程序启动时会失败。我想写一个应用程序,将去寻找使用过的文件和备份文件。由于各种原因(10年的更改等),应用程序使用的文件并不总是存储在同一位置,但其名称始终相同 因此,我的想法是编写这个简单的应用程序,它可以在系统上找到文件的所有案例(通常是一个或两个硬盘),这将是显而易见的使用和备份 简单的。。。但在使用此代码进行迭代时 Private Sub Command1_Click(sender A

所以我这里有一个非常基本的问题。。。我们有一个依赖于xml文件存储设置的应用程序。偶尔此文件会损坏,应用程序启动时会失败。我想写一个应用程序,将去寻找使用过的文件和备份文件。由于各种原因(10年的更改等),应用程序使用的文件并不总是存储在同一位置,但其名称始终相同

因此,我的想法是编写这个简单的应用程序,它可以在系统上找到文件的所有案例(通常是一个或两个硬盘),这将是显而易见的使用和备份

简单的。。。但在使用此代码进行迭代时

Private Sub Command1_Click(sender As System.Object, e As System.EventArgs) Handles Command1.Click
    'variable to hold each hdd name eg: c:\
    Dim hdd As String




    Try

        For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
            'asign the variable hdd a name for this run through
            hdd = drive.Name

            'search the hdd for the file user.config

            For Each filename As String In IO.Directory.GetFiles(hdd, "user.config", IO.SearchOption.AllDirectories)

                'variable to hold the path for each found file
                Dim file As String = IO.Path.GetFullPath(filename)


                'add each found file to the list
                List1.Items.Add(file)

            Next


        Next

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
    'iterate through each found drive





End Sub
我遇到的问题是访问被拒绝。。。

所以我想我应该在做任何事情之前检查一下权限?但我想我其实什么都没做,只是把它读对了?还是我错过了什么

我尝试过更改权限,以管理员身份运行VS2010等。这些都不起作用


TIA

RtBackup是一个系统文件夹,如果查看权限,则只有系统(甚至不是管理员)可以访问它。我想你可以像系统一样运行你的程序,但这听起来像个愚蠢的想法。我只想捕获异常,也许将其记录在某个地方,或者显示一条控制台消息,然后继续操作。

您说:“我尝试过更改权限,以管理员身份运行VS2010等。这些都不起作用。”

当你说“尝试更改许可”时,你是什么意思?您试图更改哪些权限?正如您发现的,以管理员身份运行VS不会有任何好处

问题是文件夹RtBackup的权限。一个选择(也许不是最好的?)是去

C:\Windows\System32\LogFiles\WMI
右键单击RtBackup文件夹并选择Properties,转到Security选项卡,编辑、添加,在底部框中键入“Everyone”,单击Ok。在“Rtbackup权限”窗口中,确保突出显示了所有人,然后赋予其完全控制权。好啊嗯

请记住,在执行此操作时,您已经打开了此文件夹,可以完全访问所有人和所有内容。这可能足以进行测试。当您想要发布时,您要做的是找出(或指定)您的应用运行的用户,并授予该用户阅读权限

编辑:

如果要使用try-catch跳过您没有权限的情况,请按如下方式格式化代码:

    For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives

        'asign the variable hdd a name for this run through
        hdd = drive.Name

        Try

            'search the hdd for the file user.config
            For Each filename As String In IO.Directory.GetFiles(hdd, "user.config", IO.SearchOption.AllDirectories)

            'variable to hold the path for each found file
                Dim file As String = IO.Path.GetFullPath(filename)

                'add each found file to the list
                List1.Items.Add(file)

            Next

        Catch ex As Exception
           ' handle error here, or just do nothing
        End Try

    Next

好吧,我想这就是我愚蠢的地方。我原以为“尝试捕捉”可以做到这一点,但它退出了。我得看看我错过了什么。。。感觉我在3分钟后会觉得自己很愚蠢。“尝试更改权限”我的意思是尝试更改应用程序权限。我认为这实际上是我一次愚蠢的失误。我从来没有处理过太多的捕捉错误。。。非常简单的应用程序,这不是问题。我有一个try-catch,我假设这将捕获一个错误,然后返回到处理代码,但事实并非如此。我从来没有想到这里的正确行为是查找文件,在任何情况下我都没有权限跳过它。这就是我所认为的,当尝试/接球没有发生的时候,我只是继续缓慢前进。。。我正在做这件事,你是对的,试一试可以用来跳过你没有许可证的情况。但你只需要稍微改变一下格式。我认为代码在注释中不起作用,所以我将在上面编辑我的答案,并说明如何使其起作用。我感谢您的帮助。。。但我想我在编辑后看到了与你指出的相同的问题。我在它试图查看的第一个文件/目录上得到一个错误,并在/next中退出该文件/目录。我确实按照你的建议做了编辑我真的不明白出了什么问题。。。for/next在第一次运行时抛出一个错误,正在退出。我错过了一些简单的事情。。。