2017-08-01 203 views
1

我有一個網站將大文件發佈到我的服務器。我需要逐行讀取它,或者至少能夠分割它。它有2000頁長。逐行閱讀輸入流

現在,我有:

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

感謝,

菲爾

+2

使用'StreamReader'和使用'的ReadLine()' – Gusman

回答

0

我跟着@古斯曼的想法使用streamreader。

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

由於也@Ali

1

試試這個:

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

所以:

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

我希望對你有所幫助

+0

來擊敗用戶的目的,將返回所有行中的陣列讀,是完全一樣'File.ReadAllLines'但有很多開銷,用戶想要一行一行地讀取它來處理它,而不是所有的文件都在內存中。 – Gusman

+0

@Gusman它不會,它將從流中一次返回一行。它返回一個IEnumerable而不是一個數組。 (原始代碼從這裏:https://stackoverflow.com/a/13312954/468973) – Magnus

+0

所以我返回'產量回報線',它可以枚舉和它可以與'ToArray'運行 –