C # чтение текстового файла из определенного места в EOF - PullRequest
0 голосов
/ 20 октября 2011

Попытка найти хороший способ прочитать текстовый файл, найти последний экземпляр определенной фразы и прочитать файл до конца с этого момента.

пример упрощенный

sometext1...
sometext2...
[new]
sometext3...
[new]
sometext4...
sometext5...
[new]
sometext6...
sometext7...

Хочу, чтобы я вернулся - последняя написанная часть

[new]
sometext6...
sometext7...

Я могу придумать, как это сделать, но я уверен, что есть очень эффективный способ. Гадание должно было бы найти последний индекс «[нового]» и прочитать оттуда.

Ответы [ 3 ]

3 голосов
/ 20 октября 2011
var text =  File.ReadAllText(theFile);
var tail = text.SubString(text.LastIndexOf("[New]"));
3 голосов
/ 20 октября 2011

Предполагая, что:

  1. [новый] всегда на отдельной строке.
  2. Ни одна из линий не массивна.
  3. Каждый кусок достаточно мал (не слишком большой объем памяти).
  4. Файл может быть очень большим, поэтому вы не хотите читать все это в памяти.

Тогда я бы сделал следующее. Измените первые три предположения, и это станет сложнее, измените четвертое, и я буду ленив и просто загрузлю все это в:

using(TextReader tr = new StreamReader(filePath))
{
    StringBuilder sb = new StringBuilder();
    for(string line = tr.ReadLine(); line != null; line = tr.ReadLine())
        if(line == "[new]")
            sb = new StringBuilder("[new]");//flush last chunk read.
        else
            sb.Append('\n').Append(line);
    return sb.ToString();
}
1 голос
/ 20 октября 2011

Вы можете открыть поток файлов, обернуть его в TextReader, а затем сохранить значение свойства Position в экземпляре FileStream.Позволяет сохранять позиции [новых] токенов.

...