2017-03-18 21 views
0

フォームデータから読み込んだExcelファイルからsomo c#オブジェクトを作成します。C#でHttpContentからcsvファイルのすべての行を読み込む方法

File.ReadAllLines(filename) 
        .Skip(1) 
        .Select(x => x.Split(','))... 

は、しかし、私はストレートHttpContentからの流れから外れ、それを読みたい:私は最初のファイルとして保存してから使用している場合には動作します。これを試すと、エンコードの問題が発生します。ウェブAPIアクションで

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; 

      } 
     } 
    } 

 ... 
     HttpContent file1 = files[0]; 

     Stream input = await file1.ReadAsStreamAsync(); 
     var listData = ReadLines(() => input, 
       Encoding.GetEncoding(WIN_1252_CP)).ToList(); 

私は、行の正しい番号を得るが、エンコードは動作しません。

編集:私は愚かであり、これはutf-8エンコーディングでうまくいきました。しかし、その答えは、この機能を実装するためのきめ細かな方法を提供しているので、それでも役に立つと願っています。

+1

これは、Excelファイルに添付されているフラットファイル(csv)を読み込もうとするように聞こえますか?混乱を明確にする。 – Nkosi

+0

カスタムエンコードを提供するのはなぜですか?あなたはエンコーディングを渡さないようにしましたか? –

+0

@Nkosi良い点。私はCSVを渡そうとしています、混乱のために申し訳ありません。私は質問を更新します。 – Sam

答えて

1

保存されたファイルからの読み方と同様に、httpコンテンツにReadAsStringAsyncを使用して改行しますか?これは、すべての行を読み込むファイルと同等です。

HttpContent file1 = files[0]; 
var input = await file1.ReadAsStringAsync(); 
var data = input.Split(Environment.NewLine) 
       .Skip(1) 
       .Select(x => x.Split(','))... 

フレームワークは、今までそれはもはや開発者の関心事であるように、ストリームから取り扱わないことがニーズをコードするものの世話をします。

+0

をご覧ください。ありがとう – Sam

関連する問題