我正在尝试读取txt文件,从最后一行到第一行。就像这样,实际上:
randomWord1
randomWord2
randomWord3
...
我需要从randomWord3开始读取,回到randomWord1,将每一行放在我已经测试过的LongListSelector中。
我实际上可以通过以下代码从1到3读取它:
while (!reader.EndOfStream){
rigaStorico.Add(new Storico(reader.ReadLine()));
}
我怎样才能真正做到完全相同,但从3到1?我无法理解这一点!
P.S。当然,行数是未知的
答案 0 :(得分:3)
使用内置功能有两个简单的选项:
使用Reverse
(reference):
var rigaStorico = new List<Storico>();
while (!reader.EndOfStream){
rigaStorico.Add(new Storico(reader.ReadLine()));
}
rigaStorico.Reverse();
或者,您可以始终Insert
(reference)在列表的开头添加新项目:
var rigaStorico = new List<Storico>();
while (!reader.EndOfStream){
rigaStorico.Insert(0, new Storico(reader.ReadLine()));
}
答案 1 :(得分:1)
也许是一个简单的解决方案 - 因为你不知道行的数量,所以读取它们然后添加到LLS:
List<Storico> temp = new List<Storico>();
while (!reader.EndOfStream)
{
temp.Add(new Storico(reader.ReadLine()));
}
for(int n = temp.Count - 1; n >= 0; n--)
rigaStorico.Add(temp[n]);
修改强>
虽然这个解决方案有效,但它需要一个临时列表 - 实际上@WiredPrairie提供了更好的解决方案
答案 2 :(得分:1)
这样的事应该适合你。
public void ReadBackwards(string fileName)
{
StreamReader fileStream = new StreamReader(fileName);
fileStream.BaseStream.Seek(1024, SeekOrigin.End);
char[] arr = new char[1024];
while (fileStream.BaseStream.Position > 0)
{
arr.Initialize();
fileStream.BaseStream.Seek(1024, SeekOrigin.Current);
int bytesRead = fileStream.Read(arr, 0, 1024);
}
}
// KH。