It's not really clear what you want but I assume you want to scan a hard disk folder by folder, getting a list of files in every folder.
If all you want is a list of all files, you can just ask Directory.GetFiles("c:\\", "*", SearchOption.AllDirectories)
and it will take some time then give you a single massive list of every file. Corollorary methods named like EnumerateFile* do a similar thing, returning you an enumerator over a collection of filepath strings or FileSystemInfo objects
If you want some more fine grained control over which directories, Directory also has methods to Get/Enumerate Directories - the overload that takes a string,string,SearchOption allows you to specify whether you want just the named directory to be listed, or whether you want the runtime to search all subdirectories for you. Which you pick will probably depend on how you want to give feedback to the user in regards to which directory is currently being searched - Get* methods wait until the entire search has completed before giving you the results; you have to wait but then you know have dactyl how many files you're dealing with (progress bar?), Enumerate* return results sooner (while the process of searching the disk is ongoing). but you don't know in advance the full list so you can only show what you're currently doing, not how far you've got/to go