2017-08-01 6 views
1

大きなファイルを私のサーバに投稿するウェブサイトがあります。私はそれを1行ずつ読むか、少なくともそれを分割できるようにする必要があります。 2000ページの長さです。行ごとに入力ストリームを読む

今、私が持っている:だから

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; 
     } 
    } 
} 

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

おかげで、

フィル

+2

@Ali) 'StreamReader'を使用すると' ReadLineメソッドを(使用して読み取る ' – Gusman

答えて

0

私はストリームリーダーを使って@ Gusmanの考えをたどりました。

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

アレイのすべての行が返され、ユーザの目的に反しおかげも

1

はこれを試してみてください

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

助けて欲しいと思っています

+0

は、全く同じです'File.ReadAllLines'しかし、オーバーヘッドが大きくなると、ユーザはそれを処理するために行単位で読み込み、メモリ上のすべてのファイルを持っていないことを望みます。 – Gusman

+0

@Gusmanストリームから一度に1行ずつ返されます。配列ではなくIEnumerableを返します。 (元のコード:https://stackoverflow.com/a/13312954/468973) – Magnus

+0

私は 'yield return line'を返して列挙でき、' ToArray'で実行することができます –

関連する問題