隔离存储 - 从最后一行到第一行读取文本文件

时间:2014-01-27 14:22:38

标签: c# windows-phone-8 longlistselector

我正在尝试读取txt文件,从最后一行到第一行。就像这样,实际上:

randomWord1
randomWord2
randomWord3
...

我需要从randomWord3开始读取,回到randomWord1,将每一行放在我已经测试过的LongListSelector中。

我实际上可以通过以下代码从1到3读取它:

while (!reader.EndOfStream){
    rigaStorico.Add(new Storico(reader.ReadLine()));
}

我怎样才能真正做到完全相同,但从3到1?我无法理解这一点!

P.S。当然,行数是未知的

3 个答案:

答案 0 :(得分:3)

使用内置功能有两个简单的选项:

使用Reversereference):

var rigaStorico = new List<Storico>();

while (!reader.EndOfStream){
    rigaStorico.Add(new Storico(reader.ReadLine()));
}

rigaStorico.Reverse();

或者,您可以始终Insertreference)在列表的开头添加新项目:

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。