I am trying to return a list of type FileInfo by searching an arbitrary directory recursively. However, in my main() method, when I check to see the count of FoundFiles, it is 0 meaning I returned an empty object. See Code below:
using System;
using System.IO;
using System.Collections.Generic;
class FindExtensions
{
private static List<FileInfo> SearchFileSystem(DirectoryInfo DirInfo, List<FileInfo> FileList)
{
List<FileInfo> FileInfoList = new List<FileInfo>();
try
{
foreach (DirectoryInfo SubdirInfo in DirInfo.GetDirectories())
{
SearchFileSystem(SubdirInfo, FileList);
}
}
catch
{
// do some stuff
}
try
{
foreach (FileInfo File in DirInfo.GetFiles())
{
FileInfoList.Add(File);
}
}
catch
{
// do some stuff
}
foreach (FileInfo f in FileInfoList)
{
Console.WriteLine(f.FullName);
}
return FileInfoList;
}
static void Main()
{
DirectoryInfo dir_info = new DirectoryInfo(@"C:\<whatever>");
List<FileInfo> file_list = new List<FileInfo>();
List<FileInfo> FoundFiles = SearchFileSystem(dir_info, file_list);
Console.WriteLine("Count is: " + FoundFiles.Count);
//^^^^ this returns 0...why is it empty?
Console.WriteLine("This is the debug mode. Press key to restart");
Console.ReadKey();
}
}
I added a for loop in the SearchFileSystem method to check the contents of FileInfoList before I return it, and it will contain files. However, it contains nothing in main. I'm new to the nuances of C#, so apologies if this is quite easy.
Also, it is worth noting that if I use type List with string instead of FileInfo, this works just fine. Hoping to use a List of type FileInfo if possible.
Thanks.
Why not just use the
GetFiles()
method and let it do the work for youBut! In answer to your question, you are calling
List<FileInfo> FoundFiles = new List<FileInfo>();
every time you callSearchFileSystem(...)
. Then you call the method recursively but don't use any of the results from there.If you want to use your existing code, here are the necessary changes I'd make: