2014-12-02 81 views
1

所以我有一个非常基本的问题就在这里......我们必须依赖于一个XML文件存储设置的应用程序。偶尔这个文件被破坏,应用程序在启动时会失败。我想编写一个应用程序来查找USED文件和BACKUP文件。应用程序使用的文件由于各种原因(10年更改等)并不总是存储在同一位置,但它始终命名相同。如何避免被拒绝(只是检查文件名)访问

这样的想法是我写的这个简单的应用程序,它可以去找到系统上的文件的所有情况下(通常一个或两个HDD)很明显是用于并且是备份。

简单......但同时,通过使用此代码

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 

我得到的是拒绝访问的问题迭代... enter image description here

所以我觉得我应该能之前只检查权限我对它做了什么?但是,我认为我没有真正尝试做任何事情,只是阅读正确吗?还是我失去了一些东西......

我试图改变权限,运行VS2010管理员等等这些都不奏效。

TIA

回答

2

RtBackup是一个系统文件夹,如果你看的权限,只有系统(甚至不是管理员)可以访问它。我想你可以用System来运行你的程序,但这听起来像一个愚蠢的想法。我只是想知道例外情况,可能将它记录在某处或显示控制台消息并随之移动。

+0

好了,这就是我猜我是愚蠢的。我认为尝试捕捉会这样做,但它会退出。我将不得不做一些看看我在那里错过了什么......感觉我会在大约3分钟内感到愚蠢。 – jsteffler 2014-12-02 21:26:55

0

你说:“我试图改变权限,运行VS2010管理员等等这些都不奏效。”

当你说“尝试改变许可”时,你是什么意思?您尝试更改权限是什么?正如你发现的那样,以管理员身份运行VS将无济于事。

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

C:\Windows\System32\LogFiles\WMI 

右键单击RtBackup文件夹并选择属性,进入安全选项卡,编辑,添加,键入“所有人”在底部的对话框中,单击好。在'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 
+0

“尝试更改权限”我的意思是尝试更改应用程序权限。 我认为这实际上是我的一个非常愚蠢的想念。我从来没有处理过很多捕捉错误...非常简单的应用程序,这不是一个问题。我有try catch,我认为这会捕获一个错误,然后返回到处理代码,但它不会。我从来没有想到,这里的正确行为是查找文件,在任何情况下我都没有权限只是跳过它。这就是我认为在尝试/抓住的时候会发生什么事情,但是没有发生,我只是一直在向前迈进......我正在研究 – jsteffler 2014-12-03 15:47:29

+0

嗯,你说得对,可以用try-catch来跳过那些你不需要的情况有permisison。但是你只需要以不同的方式对事物进行格式化。我不认为代码在评论中起作用,所以我会在上面编辑我的答案,告诉你如何做这个工作。 – 2014-12-03 15:59:41

+0

我很感激这个帮助......但是我想我在编辑后看到了同样的问题,就像您指出的那样。我在它试图查看的第一个文件/目录上出现错误,然后退出/下一个。 我按照你的建议进行了编辑 – jsteffler 2014-12-03 16:52:52