VB.NET在每个循环的语句中获取错误

时间:2018-11-20 20:11:50

标签: vb.net file-io foreach

我编写了一个基本脚本,以使用for each循环列出目录中的所有文件,如下所示:

'imports system.io is required,
Dim test As String 'string
    On Error Resume Next 'error handling
    For Each file In IO.Directory.GetFiles("C:\Program Files", "*", IO.SearchOption.AllDirectories) 'gets file pathfor each file in folder(s)
        test = test + file 'sets variable value to path
    Next 'loop until all files and sub-folders in the path have been searched
    RichTextBox1.Text =  test + " finished" 'show file names + path.

当对文件的访问被拒绝,错误处理程序启动并结束循环时,就会出现问题。如果发生错误,是否可以获取代码以跳过当前文件夹并转到下一个文件夹?如果错误是在循环内发生的,我本可以使用try catch endtry语句,但是由于发生在for each语句上,所以我认为On Error Resume Next会起作用。

2 个答案:

答案 0 :(得分:2)

您可以编写自己的枚举:

Dim MoveResult As Boolean
Dim fileEnumerator = IO.Directory.GetFiles("C:\Program Files", "*", IO.SearchOption.AllDirectories).GetEnumerator()
Dim result As new StringBuilder()

Try
    MoveResult = fileEnumerator.MoveNext()
Catch
    MoveResult = True
End Try

While MoveResult
    result.Append(fileEnumerator.Current)

    Try
        MoveResult = fileEnumerator.MoveNext()
    Catch
        MoveResult = True
    End Try
End While

RichTextBox1.Text =  result.ToString() + " finished" 

但是整个事情似乎是个坏主意。标准用户帐户对程序文件文件夹具有有限的访问权限。自Windows 2000以来就是这样,这是有充分理由的。在那里乱扔东西不会有什么好处。最好的情况是,跳过该文件夹中您想要完成的所有操作,都会跳过那些最有可能引起关注的文件。

答案 1 :(得分:0)

不确定您遇到的错误是什么,但是这里有一些有关如何执行io的示例:

How to do basic file I/O in Visual Basic 2005 or in Visual Basic .NET

  

列表文件此示例代码使用Directory的GetFiles方法   类以获取文件列表。

Dim file As String
Me.ListBox1.Items.Clear()
Dim files() As String = Directory.GetFiles(winDir)
For Each file In files
    Me.ListBox1.Items.Add(file)
Next
  

下一步当用户获得文件访问权限时,许多事情可能出错。的   文件可能不存在,文件可能正在使用中或用户可能没有   他们尝试访问的文件夹的文件权限。它是   在编写代码时并考虑这些可能性很重要   处理可能产生的异常。