[英]How to read all lines of an csv file from HttpContent in C#
我想從從表單數據讀取的Excel文件中創建somo c#對象。 如果我先將其存儲為文件然后使用:
File.ReadAllLines(filename)
.Skip(1)
.Select(x => x.Split(','))...
但是,我想直接從HttpContent的Stream中讀取它。 嘗試此操作時,出現編碼問題。
private const int WIN_1252_CP = 1252; // Windows ANSI codepage 1252
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;
}
}
}
在Web API操作中:
...
HttpContent file1 = files[0];
Stream input = await file1.ReadAsStreamAsync();
var listData = ReadLines(() => input,
Encoding.GetEncoding(WIN_1252_CP)).ToList();
我得到正確的行數,但是編碼不起作用。
編輯:事后看來,我很愚蠢,這本來可以和utf-8編碼一起使用的。 但是,答案給出了實現該功能的更簡潔的方法,因此我希望它仍然有用
與從保存的文件中讀取內容的方式ReadAsStringAsync
,請在http內容上使用ReadAsStringAsync
,然后按新行拆分? 那將等同於文件讀取所有行。
HttpContent file1 = files[0];
var input = await file1.ReadAsStringAsync();
var data = input.Split(Environment.NewLine)
.Skip(1)
.Select(x => x.Split(','))...
該框架將處理需要從流中處理的編碼,因此開發人員不再關心它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.