从多个文件中读取内容并写入一个文件

时间:2013-09-13 08:42:01

标签: c# file-io

在我的应用程序中有这样的情况。在创建文件之前,我的应用程序在特定文件名下的目录中搜索文件。如果找到任何文件/文件,则它应该读取每个文件内容并将这些内容(每个文件)写入新文件。我用谷歌搜索了许多人并尝试过这样的事情:

string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH");

string[] files = Directory.GetFiles(path,temp_file_format);
foreach (FileAccess finfo in files)
{
 string text = File.ReadAllText(finfo);
}

System.IO.DirectoryInfo dir = new DirectoryInfo(path);
System.IO.FileInfo[] files = dir.GetFiles(temp_file_format);
foreach (FileInfo finfo in files)
{
  finfo.OpenRead();
}

但所有这些都失败了。任何人都可以向我展示替代方案吗?

我的temp_file_format字符串有什么问题吗?

如果我可以将这些内容添加到新文件中,那将是很好的。还有,不用担心......

任何帮助都会非常感激..

4 个答案:

答案 0 :(得分:2)

这是一个竞争性的工作实现,可以完成所有这些

  • 一次不读取内存中的所有内容(这对大文件不起作用)
  • 不保留任何文件超过所需时间
using System.IO;
using System.Linq;

public static class Program { 
    public static void Main()
    {
        var all = Directory.GetFiles("/tmp", "*.cpp")
             .SelectMany(File.ReadAllLines);

        using (var w = new StreamWriter("/tmp/output.txt"))
            foreach(var line in all)
                w.WriteLine(line);
    }
}

我在单声道2.10上进行了测试,它应该适用于任何.NET 4.0+(对于File.ReadAllLines这是 lazy 行可枚举)

答案 1 :(得分:1)

这是一个简短的代码段,可以读取所有文件并将其放入路径outputPath

var lines = from file in  Directory.GetFiles(path,temp_file_format)
            from line in File.ReadAllLines(file)
            select line;
File.WriteAllLines(outputPath, content);

您使用代码时遇到的问题与读取文件无关,而只是尝试将对象用作类型而不是。 Directory.GetFiles返回stringFile.ReadXXX的数组,File.OpenRead期望路径为字符串。因此,您只需将作为path参数返回的每个字符串传递给适当的方法。以上是一个这样的例子。希望它有助于解决您的问题并解释代码的实际问题

答案 2 :(得分:0)

试试这个:

foreach (FileInfo finfo in files)
{
try
    {

        using (StreamReader sr = new StreamReader("finfo "))
        {
            String line = sr.ReadToEnd();
            Console.WriteLine(line);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("The file could not be read:");
        Console.WriteLine(e.Message);
    }
 }

答案 3 :(得分:0)

using (var output = File.Create(outputPath))
{
    foreach (var file in Directory.GetFiles(InputPath,temp_file_format))
    {
        using (var input = File.OpenRead(file))
        {
            input.CopyTo(output);
        }
    }
}