我有一个文本文件,我正在使用StreamReader进行读取。现在根据我的要求,无论我先读了哪几行,我都不想再读一次,这意味着我不想再次获取该数据。所以我添加了File.ReadLines(FileToCopy).Count();
代码以获取数量首先读取行。现在无论上面的代码行返回什么行,我都想在那之后阅读。这是我的代码。
string FileToCopy = "E:\\vikas\\call.txt";
if (System.IO.File.Exists(FileToCopy) == true)
{
lineCount = File.ReadLines(FileToCopy).Count();
using (StreamReader reader = new StreamReader(FileToCopy))
{
}
}
我需要在这里指定什么条件。请帮助我。
while ((line = reader.ReadLine()) != null)
{
var nextLines = File.ReadLines(FileToCopy).Skip(lineCount);
if (line != "")
{
}
有一种更快的方法可以执行此操作,该方法不需要您读取整个文件即可到达停止位置。关键是要跟踪文件的长度。然后,您将文件打开为FileStream
,将其定位到先前的长度(即您之前阅读的位置的末尾),然后创建一个StreamReader
。所以看起来像这样:
long previousLength = 0;
然后,当您要复制新内容时:
using (var fs = File.OpenRead(FileToCopy))
{
// position to just beyond where you read before
fs.Position = previousLength;
// and update the length for next time
previousLength = fs.Length;
// now open a StreamReader and read
using (var sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
{
var line = sr.ReadLine();
// do something with the line
}
}
}
这将节省您巨大的,如果文件变大量的时间。例如,如果上次读取文件的大小为千兆字节,那么File.ReadLines(filename).Skip(count)
将需要20秒才能到达结尾,因此您可以读取下一行。我上面描述的方法将花费更少的时间-可能不到一秒钟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句