我想通过递归搜索任意目录来返回FileInfo类型的列表。但是,在我的main()方法中,当我查看FoundFiles的计数时,它是0意味着我返回了一个空对象。请参见下面的代码:无法返回列表<FileInfo>对象
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();
}
}
我加了一个在SearchFileSystem方法循环检查FileInfoList的内容才返回它,它包含文件。但是,它并不包含任何内容。我对C#的细微差别很陌生,所以很抱歉,如果这很容易。
另外,值得注意的是,如果我使用带有字符串而不是FileInfo的List类型,这很好。如果可能,希望使用FileInfo类型的列表。
谢谢。
我应该在上面说明它,但我必须考虑运行该程序的用户将有未经授权访问的文件。因此,递归策略。不过,我会使用AddRange方法。 – corneria 2014-11-21 05:17:31
谢谢先生!不胜感激。 – corneria 2014-11-21 05:24:19
@PiyushParashar对象默认在C#中通过引用传递。只有使用结构体时,你需要明确声明你通过ref或out传递。这对于对象来说也不是一个坏主意,因为它说明了意图,但是对于这样的非常简单的代码,我通常会跳过。 – techvice 2014-11-21 05:28:20