C# 读取每个文件c的行#

C# 读取每个文件c的行#,c#,C#,如何逐行读取文件列表? 我有一个包含许多文件的目录,我需要将所有文件保存在一个列表中,并逐行处理它们 到目前为止,我已经做了以下工作: //fetching all files from directory DirectoryInfo d = new DirectoryInfo("path"); Dictionary<int, FileInfo> DatFiles = new Dictionary<int, FileInfo>(); int filecounter = 1

如何逐行读取文件列表? 我有一个包含许多文件的目录,我需要将所有文件保存在一个列表中,并逐行处理它们

到目前为止,我已经做了以下工作:

//fetching all files from directory
DirectoryInfo d = new DirectoryInfo("path");
Dictionary<int, FileInfo> DatFiles = new Dictionary<int, FileInfo>();
int filecounter = 1;


foreach (var dat in d.EnumerateFiles())
{
    DatFiles.Add(filecounter, dat);
    filecounter++;
}
    Console.WriteLine(filecounter);
foreach (var fileName in DatFiles)
{

   foreach (var line in File.ReadLines(fileName.Value.OpenText().ToString()))
   {
      //run some methods
   }
}
//从目录中获取所有文件
DirectoryInfo d=新的DirectoryInfo(“路径”);
字典DatFiles=新字典();
int filecounter=1;
foreach(d.EnumerateFiles()中的var dat)
{
添加(文件计数器,dat);
filecounter++;
}
Console.WriteLine(文件计数器);
foreach(DatFiles中的var文件名)
{
foreach(File.ReadLines(fileName.Value.OpenText().ToString())中的var行)
{
//运行一些方法
}
}

执行时,我得到一个异常,文件未找到。即使列表中满是文件名。

这段较小的代码应该可以完成这项任务

var files = Directory.GetFiles("path");
foreach(var f in files)
{
    using(StreamReader reader = new StreamReader(f))
    {
       var lines = reader.ReadToEnd().Split(new string[]{Environment.NewLine});
//    Do here
     }

}

当所有其他操作都失败时,请参阅


EnumerateFiles()
返回
FileInfo
对象的列表,并且
File.ReadLines()
接受
字符串
路径参数;您可能希望在
foreach
中使用
File.ReadLines(fileName.Value.FullName)
,因为这会给出实际文件的路径
OpenText()
返回一个
StreamReader
对象。

它们都是文本文件还是任意类型的?您在使用上述代码时遇到了哪些具体问题?若要获取与DirectoryInfo接近的文件列表,请调用该方法。要从文件中读取文本内容,请阅读一下。OP有一个FileInfo,为什么不使用它呢。当有ReadLine方法时,为什么要读所有的行并拆分?这个或ReadLine,我认为他想要的是全部,但他完全可以逐行阅读line@Paparazzi如果他只需要文件的行,那么没有理由管理StreamReader对象并检查所有这些内容;让框架来处理它。对于他的用例来说,这种方式似乎更简洁,而且它仍然保持着他所展示的风格。所有这些?他已经有一个FileInfo和对OpenText()的调用。他已经完成了创建FileInfo的开销。为什么要重新开始?FileReadLines必须在开始枚举之前读入所有行。@Papazazzi well OpenText在我的方法中不起作用,当我使用全名时,我能够对其中的每个文件逐行进行流式处理list@WT86很高兴你让它工作了。它会很好用的。你有FileInfo和StreamReader非常擅长逐行阅读。如果您在我的回答中使用了语法,它会工作得很好。@Papazazzi ReadLines和ReadAllLines方法的区别如下:当您使用ReadLines时,您可以在返回整个集合之前开始枚举字符串集合;使用ReadAllLines时,必须等待返回整个字符串数组,然后才能访问该数组。因此,当您处理非常大的文件时,ReadLines会更加高效。
// Open the stream and read it back.
using (StreamReader sr = fi.OpenText())
{
    string s = "";
    while ((s = sr.ReadLine()) != null) 
    {
        Console.WriteLine(s);
    }
}