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