1

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

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

4 回答 4

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它是一个惰性逐行枚举)

于 2013-09-13T08:55:11.070 回答
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返回一个数组,并string期望路径为字符串。因此,您只需将作为路径参数返回的每个字符串传递给适当的方法。上面就是一个这样的例子。希望它有助于解决您的问题并解释您的代码的实际问题File.ReadXXXFile.OpenRead

于 2013-09-13T08:59:11.643 回答
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);
    }
 }
于 2013-09-13T08:47:03.920 回答
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);
        }
    }
}
于 2013-09-13T08:53:47.210 回答