簡體   English   中英

如何在C#中從HttpContent讀取csv文件的所有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM