Вопрос по stream, c#, file – Как эффективно читать только последнюю строку текстового файла

5

Нужно получить только последнюю строку из большого файла журнала. Каков наилучший способ сделать это?

Ваш Ответ

3   ответа
14

ReverseLineReader:

Как читать текстовый файл обратно с помощью итератора в C #

Тогда беги.Take(1) в теме.

var lines = new ReverseLineReader(filename);
var last = lines.Take(1);

Вы хотите использоватьДжон Скитс библиотекаMiscUtil напрямую, а не копировать / вставлять код.

Ницца! Спасибо, попробую. 0x49D1
Смотрите мой ответ в возможном дубликатеstackoverflow.com/a/33907602/4821032
Странно, что библиотеки нет в Nuget .. Спасибо! 0x49D1
2
    String lastline="";
    String filedata;

    // Open file to read
    var fullfiledata = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    StreamReader sr = new StreamReader(fullfiledata);

    //long offset = sr.BaseStream.Length - ((sr.BaseStream.Length * lengthWeNeed) / 100);
    // Assuming a line doesnt have more than 500 characters, else use above formula
    long offset = sr.BaseStream.Length - 500;

    //directly move the last 500th position
    sr.BaseStream.Seek(offset, SeekOrigin.Begin);

    //From there read lines, not whole file
    while (!sr.EndOfStream)
    {
        filedata = sr.ReadLine();
        // Interate to see last line
        if (sr.Peek() == -1)
        {
            lastline = filedata;
        }
    }       

    return lastline;
}
-2

Или вы можете сделать это в две строки (только .Net 4)

var lines = File.ReadLines(path);
string line = lines.Last();
Это читает все содержимое файла в память
Хотя это может сделать работу, это невероятно неэффективно для памяти (как отмечает RJFalconer), а также имеет большую задержку - помните, что чтение файла является одной из самых медленных вещей, которые вы можете сделать в программе. Если вы читаете редко, это может сработать, но этоfar от сильного, профессионального решения.

Похожие вопросы