c# - 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))
    {
        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 中应该有数据了。但是,除非在别处有更多处理,否则 OutputFile 中的结果是错误的:Data 将是 byte[] 而不是“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);

"New Item ",Falcon,7

关于c# - CsvHelper 不将数据写入内存流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37570253/

相关文章:

c# - 以数组的形式存储 Combobox 项目并在 WPF 中检索 SelectedId

c# - 在 asp.net 应用程序中启用 c# 7

java - 我在哪里可以找到这个 jar : commons-csv 0. 1-524170

php - fputcsv() 为每个条目添加引号?

python - 将 Elasticsearch 结果导出到 CSV 文件

c# - 带有 nuget 的 MS Build Extension Pack 无法获取 MSBuild.ExtensionPack.tasks

c# - 对象类型不存在映射

python - 如何使用 Python 解析 WordPress CSV 导出

java - 在java中加载和解析csv

python - 导出至 CSV 文件