我编写了一个基本脚本,以使用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
会起作用。
答案 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
下一步当用户获得文件访问权限时,许多事情可能出错。的 文件可能不存在,文件可能正在使用中或用户可能没有 他们尝试访问的文件夹的文件权限。它是 在编写代码时并考虑这些可能性很重要 处理可能产生的异常。