Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个文件读取内容并写入一个文件_C#_File Io - Fatal编程技术网

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

C# 从多个文件读取内容并写入一个文件,c#,file-io,C#,File Io,在我的应用程序中有这样一种情况。在创建文件之前,我的应用程序会在特定文件名下的目录中搜索文件。如果找到任何文件,则应读取每个文件的内容,并将这些内容(每个文件的)写入新文件。我在谷歌上搜索了很多,并尝试了一些类似的方法: string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH"); string[] files = Directory.GetFiles(path,temp_file_format

在我的应用程序中有这样一种情况。在创建文件之前,我的应用程序会在特定文件名下的目录中搜索文件。如果找到任何文件,则应读取每个文件的内容,并将这些内容(每个文件的)写入新文件。我在谷歌上搜索了很多,并尝试了一些类似的方法:

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);
}

但所有这些都失败了……有人能给我一个替代方案吗

我的临时文件格式字符串有什么错误吗

如果我能将这些内容预先添加到新文件中,那就太好了。除此之外,别担心

非常感谢您的帮助。

试试以下方法:

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);
    }
 }

这是一个可以实现所有这些功能的工作实现

  • 无需一次性读取内存中的所有内容(对于大文件不起作用)
  • 未将任何文件保持打开状态超过所需时间

我在mono 2.10上测试了它,它应该可以在任何.NET 4.0+上运行(对于
文件.ReadAllLines
,这是一个惰性的行式枚举)

这里有一个短片段,它读取所有文件并将它们输出到路径
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.ReadXXX
File组成的数组。OpenRead
希望路径为字符串。因此,只需将作为path参数返回的每个字符串传递给相应的方法。以上就是这样一个例子。希望它能帮助您解决问题,并用代码解释实际问题

您所说的失败是什么意思?它抛出错误或不读取内容?您不需要任何其他选择。只要正确使用方法。对于ex
File.ReadAllText
使用字符串作为参数,不要将字符串强制转换为
FileAccess
等@Karthik:它甚至会引发一些错误,例如:无法从'System.IO.FileInfo'转换为'string',等等。@I4V:I用作File.ReadAllText(finfo)…然后它还抛出了一个错误:无法从'System.IO.FileInfo'转换为'string',我认为这将只从一个文件中获取内容..对吗?不,它将从所有文件中获取所有行。这是调用
SelectMany
@vysakh-Nope的查询理解版本。你可以。。。尝试一下(或者阅读代码。使用和的文档)@RuneFS+1告诉我关于
writeAllines
:)我的答案中有
ReadAllLines
(好的:)。此外,他还用自己的语言解释了OP的问题attempt@vysakh您添加了“使用System.Linq;”吗?@sehe:如果我有10个文件,这会从所有这10个文件中读取并在我的新文件中写入相同的内容吗?是否要在新文件中预编内容?是否有可能删除所有这些文件?我已经有一个文件。实际上,我正在将所有这些内容追加到此文件。这就是为什么我要求预编?
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);
        }
    }
}
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);
    }
}
var lines = from file in  Directory.GetFiles(path,temp_file_format)
            from line in File.ReadAllLines(file)
            select line;
File.WriteAllLines(outputPath, content);