如何在下面的递归函数</string>中追加List <string>

时间:2013-10-01 02:51:31

标签: c# list

 class FileSetGenerator
     {
         public static void FileSetGen(string[] arg, string path, string pattern, oout List<string> files)
         {
        int count = 0;
        files = new List<string>();
        if(arg.Contains("/R"))
        {
            Console.WriteLine("Called");
            files.AddRange(Directory.GetFiles(path, pattern));
            count++;
            //List<string> dummy = new List<string>();
            foreach (string file in files)
                Console.WriteLine(file);
            string[] dirs = Directory.GetDirectories(path);
            foreach (string dir in dirs)
                FileSetGen(arg, dir, pattern, out files);

        }
        else
            files.AddRange(Directory.GetFiles(path, pattern));
    }
}

我正在尝试使用此递归调用获取以指定目录(路径)为根的所有文件。特别是我想填写List&lt;&gt;结构,包含pwd及其子目录中的所有文件。但每次调用递归函数时,List&lt;&gt;结构获取子目录的文件,以及先前的文件被覆盖。有没有什么方法可以在每次执行递归调用时附加新数据? 我在c#编码。

2 个答案:

答案 0 :(得分:1)

要解决此问题,请使用ref代替out作为函数的最后一个参数,不要在函数内重新创建它。而是在调用函数中创建一次列表,并将其作为ref参数发送到此函数。 Directory.GetFiles()已经做了你想要实现的目标。

答案 1 :(得分:1)

您需要将初始化列表传递给函数的第一次调用。

但好像你在目录中搜索带有模式的所有文件。 您可以使用接受Directory.GetFilesSearchOption重载,您可以将其指定为AllDirectories以获取所有子文件夹中的文件。