2017-08-01 167 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'运行 –