When you encounter a directory that you do not have access to, your try/catch caught the error but you did not return ar.
Note the @MotoX80 comments.
The code is only finding the last occurrence of whatever file that you are looking for. Is that what you want?
Module Module1
Sub Main()
Dim x As String = ""
Dim arFiles As String
arFiles = GetDirectoryLocation("c:\", "EvanInHallway.jpg")
MsgBox(arFiles)
End Sub
Public Function DoRecursiveSearch(ByVal DirPath As String,
Optional ByVal FileSearchPattern As String = "*.*",
Optional ByVal FolderSearchPattern As String = "*",
Optional ByVal Recursive As Boolean = True) As ArrayList
' Specify the directories you want to manipulate.
Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(DirPath)
Dim ar As New ArrayList
Try
' Get only subdirectories
Dim dirs As System.IO.FileSystemInfo() = di.GetDirectories(FolderSearchPattern)
Dim files As System.IO.FileSystemInfo()
Dim diNext As System.IO.DirectoryInfo
Dim fiNext As System.IO.FileInfo
files = di.GetFiles(FileSearchPattern)
For Each fiNext In files
Console.WriteLine(fiNext.Name)
ar.Add(fiNext)
Next
If Recursive Then
For Each diNext In dirs
ar.AddRange(DoRecursiveSearch(diNext.FullName, FileSearchPattern, FolderSearchPattern, Recursive))
Next
End If
Catch e As Exception
Console.WriteLine("The process failed: {0}", e.ToString())
End Try
Return ar ' @ MotoX80 you need to return the arraylist
End Function
Public Function GetDirectoryLocation(ByVal SearchDir As String, ByVal searchFile As String) As String
'"C:\Program Files\Norton Security\"
Dim NortonLocation As String = "" ' @ MotoX80 undefined variable
Dim msg As String
Dim ar As New ArrayList
Dim fi As System.IO.FileInfo
'ar = GetFiles(Server.MapPath("."), "*.aspx")
ar = DoRecursiveSearch(SearchDir, searchFile)
'Response.Write("<Pre>")
For Each fi In ar
NortonLocation = fi.FullName
'msg = msg & "File Path: " & fi.FullName & vbCrLf
'msg = msg & "File Size: " & fi.Length & vbCrLf
'msg = msg & "Last Modified: " & fi.LastWriteTime & vbCrLf
'msg = msg & "---------------------------" & vbCrLf
'Console.WriteLine(msg)
Next
'Response.Write("</Pre>")
If NortonLocation = "" Then
MsgBox(SearchDir & " " & searchFile & " not found")
End If
Return NortonLocation ' @ MotoX80 we only return the first occurrance????
End Function
End Module