如何将list <string>写入文本文件?</string>

时间:2014-01-26 14:52:09

标签: c#

每次如何将f附加到列表中,然后将列表写入文本文件?我尝试使用以下代码,但文本文件始终为空?

  static void DirSearch(string dir, string pattern)
    {
        try
        {
            List<String> filesList = new List<string>();

            foreach (string f in Directory.GetFiles(dir, pattern))
            //Console.WriteLine(f);
            {
                // Console.WriteLine(f); // // <- This works correctly
                filesList.Add(f);
            }
            foreach (string d in Directory.GetDirectories(dir))
            {
                //Console.WriteLine(d); 
                DirSearch(d, pattern);
            }

            File.WriteAllLines("files.txt", filesList.ToArray());

        }
        catch (System.Exception ex)
        {
            //Console.WriteLine(ex.Message);
        }
    }

1 个答案:

答案 0 :(得分:3)

我怀疑问题是每次调用DirSearch时,你都会覆盖以前调用的文件输出。如果最终调用没有文件(只有目录),那么最终会得到一个空文件。

选项:

  • 使用Directory.GetFiles(dir, pattern, SearchOption.AllDirectories,因此您根本不需要使用递归。
  • 使用File.AppendAllLines代替File.WriteAllLines
  • 完全在内存中(递归地)构建列表,并且只在最后调用File.WriteAllLines

后一种方法看起来像这样:

public static DirSearch(string dir, string pattern)
{
    List<string> files = new List<string>();
    DirSearchImpl(dir, pattern, files);
    File.WriteAllLines("files.txt", files);
}

private static DirSearchImpl(string dir, string pattern, List<string> files)
{
    // Simpler than your previous loop...
    files.AddRange(Directory.GetFiles(dir, pattern));
    foreach (var subdirectory in Directory.GetDirectories(dir))
    {
        DirSearchImpl(subdirectory, pattern, files);
    }
}

我还建议更改你的异常处理 - 捕捉Exception很少是一个好主意,如果事情失败,我不确定你真的想继续前进,是吗?