2014-01-27 1 views
1

Я пытаюсь прочитать файл txt, начиная с последней строки до первой. Это как это, на самом деле:Изолированное хранилище - прочитайте текстовый файл с последней строки до первой

randomWord1 
randomWord2 
randomWord3 
... 

мне нужно, чтобы начать чтение из randomWord3, обратно randomWord1, помещая каждую строку в LongListSelector я уже опробован.

Я на самом деле читать это от 1 до 3 с помощью этого кода:

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

Как я могу реально сделать точно такой же, но с 3 до 1? Я не могу понять это!

p.s. Конечно, количество строк не известно

ответ

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())); 
} 
+0

+1 - гораздо лучшие решения, чем мои – Romasz

1

Может быть простое решение - вы не знаете, NUMER строк, прочитать их все потом добавить к 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]); 

EDIT
Althouh это решение работает, ему нужен временный список - на самом деле есть лучшие решения, предоставляемые @WiredPrairie

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.

+0

Как это ответить на вопрос? Код, который вы показываете, ничего не делает с «списком» и не имеет отношения к символам EOL. – WiredPrairie