2016-06-01 14 views
2

CsvHelperにいくつかの問題があり、メモリストリームに書き込んでいます。私はストリームの作家をフラッシュし、位置を設定しようとした他のすべてを試した。私はそれを明らかに失敗した本当に簡単なテストケースに絞り込んだと思います。私はここで間違って何をしていますか?CsvHelperがメモリストリームにデータを書き込んでいない

public OutputFile GetTestFile() 
{ 
    using (var ms = new MemoryStream()) 
    using (var sr = new StreamWriter(ms)) 
    using (var csv = new CsvWriter(sr)) 
    { 
     csv.WriteField("test"); 
     sr.Flush(); 

     return new OutputFile 
     { 
      Data = ms.ToArray(), 
      Length = ms.Length, 
      DataType = "text/csv", 
      FileName = "test.csv" 
     }; 
    } 
} 

[TestMethod] 
public void TestWritingToMemoryStream() 
{ 
    var file = GetTestFile(); 
    Assert.IsFalse(file.Data.Length == 0); 
} 

この訂正されたコードが実際にテストに合格するため、正解を編集します。私はStringWriterに書き込んでバイトに変換することで、狂ったような問題を解決するのはなぜか分かりませんが、今は動作します。

csv.WriteField("test"); 
csv.NextRecord(); 
sr.Flush(); 

、memstreamを持っている必要があります。CSVHelper以来

using (var sw = new StringWriter()) 
using (var csvWriter = new CsvWriter(sw, config)) 
{ 
    csvWriter.WriteRecords(records); 
    return Encoding.UTF8.GetBytes(sw.ToString()); 
} 

答えて

2

が行/行あたりいくつかののフィールドを集めることを意味し、それはあなたが現在のレコードが行われていることを教えまで、いくつかのバッファリングそのものを行いますその中のデータただし、他の場所で処理が行われない限り、OutputFileの結果は間違っています。Databyte[]で、「text/csv」ではありません。

string sBuff; 
using (StringWriter sw = new StringWriter()) 
using (CsvWriter csv = new CsvWriter(sw)) 
{ 
    csv.WriteRecord<SomeItem>(r); 
    sBuff = sw.ToString(); 
} 
Console.WriteLine(sBuff); 

"新規アイテム"、ファルコン、7

StringWriterがより適切なものを生成するように思えます
関連する問題