2011-01-28 45 views
1

我通常知道你會使用File.ReadAllLines,但我試圖用上傳的文件來做。用LINQ解析文本文件

我可以以某種方式將它放到臨時位置?或從內存中讀取它嗎?

我能得到這個工作

+1

可能相關http://stackoverflow.com/questions/1797576/c-file-upload-read-to-memory-and-use-as-text-file-is-there-a-better-way – 2011-01-28 06:49:01

回答

4

這是一個string,一個Stream,還是什麼?無論哪種方式,你想要一個TextReader - 問題只是StringReaderStreamReader。一旦你有,我會做這樣的事情:

public static IEnumerable<string> ReadLines(TextReader reader) { 
    string line; 
    while((line = reader.ReadLine()) != null) yield return line; 
} 

然後取其讀者,我既可以用戶:

foreach(var line in ReadLines(reader)) { 
    // note: non-buffered - i.e. more memory-efficient 
} 

或:

string[] lines = ReadLines(reader).ToArray(); 
// note: buffered - all read into memory at once (less memory efficient) 

如果是IE a Stream您正在讀的:

using(var reader = new StreamReader(inputStream)) { 
    foreach(var line in ReadLines(reader)) { 
     // do something fun and interesting 
    } 
}