2016-07-13 8 views
9

Diciamo che ho un file e si desidera leggere le righe, è:StreamReader per leggere gamma di linee

while(!streamReader.EndOfStream) { 
     var line = streamReader.ReadLine(); 
    } 

Come faccio a leggere solo una gamma di linee? Solo letture da 10 a 20 solo.

risposta

11

io suggerisco di usare Linq senza alcun lettore:

var lines = File 
    .ReadLines(@"C:\MyFile.txt") 
    .Skip(10) // skip first 10 lines 
    .Take(10); // take next 20 - 10 == 10 lines 

    ... 

    foreach(string line in lines) { 
    ... 
    } 

Nel caso in cui devono utilizzare il lettore, è possibile implementare qualcosa di simile

// read top 20 lines... 
    for (int i = 0; i < 20 && !streamReader.EndOfStream; ++i) { 
    var line = streamReader.ReadLine(); 

    if (i < 10) // ...and skip first 10 of them 
     continue; 

    //TODO: put relevant code here 
    } 
+0

l'approccio LINQ è molto di più elegante ma vorrei liberarmi di 'var lines = ..' e andare dritto in un ciclo 'foreach (stringa di righe in File.Readlines ...' – Ted

+0

È più elegante, ma legge il * intero * file in memoria prima, d Non è così? Questa potrebbe non essere una buona idea per i file più grandi ... –

+1

@Thorsten Dittmar: No! '.ReadLines' non è' .ReadAllLines' (per favore, nota 'All') –

Problemi correlati