2017-08-01 3 views
1

Ich habe eine Website, die eine große Datei auf meinem Server veröffentlicht. Ich muss es Zeile für Zeile lesen oder zumindest teilen können. Es ist 2000 Seiten lang.Zeile für Zeile lesen ein Eingangsstrom

Gerade jetzt, ich habe:

if (file != null && file.ContentLength > 0) 
       { 
        using (file.InputStream) 
        { 
         //Looking for this part 
        } 
       } 

Danke,

Phil

+2

eine 'StreamReader' verwenden und lesen mit' Readline() ' – Gusman

Antwort

0

Ich folgte @ Gusmans Idee der Verwendung des Streamreaders.

stream = new StreamReader(file.InputStream); 
using (stream) 
{ 
    while (stream.Peek() >= 0) 
    { 
     var line = stream.ReadLine(); 
     //some stuff    
    } 
} 

Dank auch @Ali

1

Versuchen Sie folgendes:

public IEnumerable<string> ReadLines(Func<Stream> streamProvider, 
            Encoding encoding) 
{ 
    using (var stream = streamProvider()) 
    using (var reader = new StreamReader(stream, encoding)) 
    { 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      yield return line; 
     } 
    } 
} 

So:

var lines = ReadLines(() => file.InputStream, Encoding.UTF8).ToArray(); 

Ich hoffe, hilfreich zu sein

+0

, die dem Zweck des Benutzers besiegt, die alle Zeilen in einem Array zurück, ist genau das gleiche wie 'File.ReadAllLines' aber mit viel Overhead, möchte der Benutzer es zeilenweise lesen, um es zu verarbeiten und nicht die gesamte Datei im Speicher zu haben. – Gusman

+0

@Gusman Es wird nicht, es wird jeweils eine Zeile aus dem Stream zurückgegeben. Es gibt ein IEnumerable nicht ein Array zurück. (Original-Code von hier: https://StackOverflow.com/A/13312954/468973) – Magnus

+0

so gebe ich zurück 'yield return line' und es könnte aufgezählt werden und Es könnte mit' ToArray' –