VB.NET Code to search hard drive in background multi-thread:

After many requests from all of you, I have written the requested code in VB.net to do the following:

Pseudo Code: (What will our program do in simple English terminology.)

  • Search ALL hard drives, USB media, etc..
  • Search ALL directories & sub-directories, on ALL hard drives.
  • Place the DRIVE, DIRECTORIES, FILENAME in a memory ARRAY and a text file. Example:
    • C:\FILENAME.EXT
    • C:\WINDOWS\FILENAME.EXT
    • D:\FILENAME.EXT
    • D:\BACKUP\FILENAME.EXT
    • etc…
  • Do this in a way that does not hog system resources. (background process and/or multi threading.)
  • Keep all errors from user and handle on own. (file access issues, errors, etc…)

VB.NET Code to search hard drive in background multi-thread:

To create this project create a VB.NET project with the following:

  • One Form (with name: Form1)
  • One BackgroundWorker (with name: BackgroundWorker1)

Open code window for Form1. Delete all the code. Then paste our code from here, and your program is complete.

.

VB.NET Code to search hard drive in background multi-thread


Imports System.ComponentModel
Imports System.IO
Imports System.Threading
Imports Microsoft.VisualBasic.Devices

Public Class Form1



    Public path As String = "c:\"
    Public fileList As New List(Of String)






    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        BackgroundWorker1.RunWorkerAsync()

    End Sub





    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        Me.BackColor = Color.Green
    End Sub





    Sub GetAllAccessibleFiles(path As String, filelist As List(Of String))


        For Each file As String In Directory.GetFiles(path, "*.*")
            Application.DoEvents()

            filelist.Add(file)
        Next
        For Each dir As String In Directory.GetDirectories(path)
            Application.DoEvents()
            Try
                GetAllAccessibleFiles(dir, filelist)
            Catch ex As Exception

            End Try
        Next
    End Sub




    Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Application.DoEvents()

        For Each drive In DriveInfo.GetDrives
            Application.DoEvents()

            GetAllAccessibleFiles(drive.ToString, fileList)

            'Convert List to string array if you want
            'Dim files As String() = fileList.ToArray


        Next

        Application.DoEvents()

        Using sw As New System.IO.StreamWriter("c:\filelist.txt")

            For Each s As String In fileList
                Application.DoEvents()


                'write to file
                '
                sw.WriteLine(s)

            Next

            sw.Flush() ''yeap I'm the sort of nerd that flushes it then closes it, just like my toilet.   :-)
            sw.Close()
        End Using

    End Sub
End Class