임의의 디렉터리를 재귀 적으로 검색하여 FileInfo 형식의 목록을 반환하려고합니다. 그러나, 내 main() 메서드에서 FoundFiles의 수를 확인하기 위해 검사 할 때 빈 개체를 반환한다는 의미는 0입니다. List <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 방법에 for 루프가 FileInfoList의 내용을 확인하기 위해 추가하고 파일을 포함합니다 : 아래 코드를 참조하십시오. 그러나 메인에는 아무것도 들어 있지 않습니다. 나는 C#의 미묘한 차이에 익숙하다.
또한 FileInfo 대신 string 형식의 List를 사용하면이 방법이 유용합니다. 가능한 경우 FileInfo 형식의 List를 사용하려고합니다.
감사합니다.
위 내용을 설명 했어야하지만 프로그램을 실행하는 사용자에게 무단 액세스 권한이있는 파일을 고려해야합니다. 따라서 재귀 적 전략. 그래도 AddRange 메서드를 사용하겠습니다. – corneria
고맙습니다! 대단히 감사합니다. – corneria
@PiyushParashar 개체는 C#에서 참조로 전달되도록 기본값으로 설정됩니다. 구조체를 사용하는 경우에만 ref 또는 out으로 전달한다는 명시 적으로 명시해야합니다. 이것은 의도를 기술했기 때문에 객체에 대해서도 나쁜 생각이 아니지만 일반적으로 건너 뛰는 이와 같은 매우 단순한 코드에 대해서입니다. – techvice