Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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#_.net_File Io - Fatal编程技术网

C# 读取文件中的第一行和最后一行

C# 读取文件中的第一行和最后一行,c#,.net,file-io,C#,.net,File Io,我需要在.NET4.5应用程序中读取日志文件的第一行和最后一行 ,即。 日志文件的每一行都有时间戳,我想找到最年轻(第一行)和最老(最后一行)的时间戳。这不是一项困难的任务,但我想知道是否有一种聪明的方法来完成它 当前的实现看起来是这样的(我实际上需要日志文件的第二行,因为第一行是空的,因此Skip()): 这个非常简单的代码有什么改进吗?在一个IEnumerable中读一次,然后将其用于第二行和最后一行 var lines = File.ReadLines(logFile); string f

我需要在.NET4.5应用程序中读取日志文件的第一行和最后一行 ,即。
日志文件的每一行都有时间戳,我想找到最年轻(第一行)和最老(最后一行)的时间戳。这不是一项困难的任务,但我想知道是否有一种聪明的方法来完成它

当前的实现看起来是这样的(我实际上需要日志文件的第二行,因为第一行是空的,因此
Skip()
):


这个非常简单的代码有什么改进吗?

在一个
IEnumerable
中读一次,然后将其用于第二行和最后一行

var lines = File.ReadLines(logFile);
string firstLine = lines.Skip(1);
string lastLine = lines.Last();

在当前代码中,您要读取两次,如果您希望在第一次读取和第二次读取之间修改文件,那么您必须读取两次文件

IEnumerable
中读取一次,然后将其用于第二行和最后一行

var lines = File.ReadLines(logFile);
string firstLine = lines.Skip(1);
string lastLine = lines.Last();

在当前代码中,您要读取两次,如果您希望在第一次读取和第二次读取之间修改文件,那么您必须读取两次文件

最明显的解决方案File.ReadLines已经找到了

对于大文件,另一种选择是:

从这里开始的ReverseLineReader类:

我们已经找到了最明显的解决方案File.ReadLines

对于大文件,另一种选择是:

从这里开始的ReverseLineReader类:

定义“改进”。Habib的答案对于小文件非常有用。但是,对于非常大的文件,速度会非常慢。但加快速度是一件很重要的事情。最后,您将以二进制形式读取文件的结尾,并向后处理到最后一行的开头。看看您是否真的感兴趣。Skip(1)表示它返回第一个元素之后的其余元素。我猜你是第一个()?@JimMischel提高了执行时间,内存紧随其后。由于总是最好针对最常见的情况进行优化,我可以说,大多数文件的大小大约为~5MB或更少,在极端情况下大约为25MB(~200k行)。我还可以对其中20-30个文件进行解析。我在前面回顾了阅读,同意这看起来“相当棘手”,如果可能的话,我会避免。当前的解决方案不是“慢”的,如果大多数文件都是5MB,那么我可能会使用Habib的方法。加载几个大文件可能需要1/2秒(如果需要的话)。但如果你所拥有的足够快,那么我会同意。定义“改进”。Habib的答案对于小文件非常有用。但是,对于非常大的文件,速度会非常慢。但加快速度是一件很重要的事情。最后,您将以二进制形式读取文件的结尾,并向后处理到最后一行的开头。看看您是否真的感兴趣。Skip(1)表示它返回第一个元素之后的其余元素。我猜你是第一个()?@JimMischel提高了执行时间,内存紧随其后。由于总是最好针对最常见的情况进行优化,我可以说,大多数文件的大小大约为~5MB或更少,在极端情况下大约为25MB(~200k行)。我还可以对其中20-30个文件进行解析。我在前面回顾了阅读,同意这看起来“相当棘手”,如果可能的话,我会避免。当前的解决方案不是“慢”的,如果大多数文件都是5MB,那么我可能会使用Habib的方法。加载几个大文件可能需要1/2秒(如果需要的话)。但是如果你有足够快的速度,那我就用它。
不是数组,它是一个
IEnumerable
。这比读入数组要好,它只会让您的文档有点混乱。那么,当我调用
ReadLines
两次时,会发生什么呢?整个文件会被读取两次吗?@valsidav:不会,整个文件不会被读取两次。但是,系统必须打开文件两次,这并不便宜。
不是数组,而是
IEnumerable
。这比读入数组要好,它只会让您的文档有点混乱。那么,当我调用
ReadLines
两次时,会发生什么呢?整个文件会被读取两次吗?@valsidav:不会,整个文件不会被读取两次。但是,系统必须打开文件两次,这并不便宜。