C# CsvHelper未将数据写入内存流

C# CsvHelper未将数据写入内存流,c#,csv,export-to-csv,csvhelper,C#,Csv,Export To Csv,Csvhelper,在CsvHelper和写入内存流方面存在一些问题。我尝试过刷新流写入器、设置位置以及其他所有尝试。我想我已经把它缩小到了一个非常简单的测试用例,显然失败了。我做错了什么 public OutputFile GetTestFile() { using (var ms = new MemoryStream()) using (var sr = new StreamWriter(ms)) using (var csv = new CsvWriter(sr)) {

在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写入然后将其转换为字节可以解决所有疯狂的刷新问题,但它现在可以工作了

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

由于
CSVHelper
旨在每行/每行收集多个字段,因此它会自行进行一些缓冲,直到您告诉它当前记录已完成:

csv.WriteField("test");
csv.NextRecord();
sr.Flush();
现在,memstream应该包含数据。但是,除非其他地方有更多处理,否则输出文件中的结果是错误的:
数据将是
字节[]
而不是“text/csv”。似乎
StringWriter
会产生更合适的结果:

string sBuff;
using (StringWriter sw = new StringWriter())
using (CsvWriter csv = new CsvWriter(sw))
{
    csv.WriteRecord<SomeItem>(r);
    sBuff = sw.ToString();
}
Console.WriteLine(sBuff);
字符串sBuff;
使用(StringWriter sw=new StringWriter())
使用(CsvWriter csv=新CsvWriter(sw))
{
csv.WriterRecord(r);
sBuff=sw.ToString();
}
控制台写入线(sBuff);
“新项目”,猎鹰,7