MemoryStream 生成 CSV 字符串时会带来一半数据

问题描述 投票:0回答:2

我确实有一个非常简单的问题,但需要很多时间才能找到解决方案。还是没找到,就想在这里发帖。 下面是获取 CSV 格式字符串的代码。但问题是,csv 数据从 1020 个字符被截断。仅前 1020 个字符仅显示在“csvString”变量中。

var records = new List<CSVDto>();
//In here Assign data to records 

var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    HasHeaderRecord = true,
    Delimiter = ","
};

using (var mem = new MemoryStream())
{
    using (var writer = new StreamWriter(mem))
    {
        using (var csvWriter = new CsvWriter(writer, csvConfig))
        {
            await csvWriter.WriteRecordsAsync(records);
            var csvString = Encoding.UTF8.GetString(mem.ToArray()); //im getting only first 1020 characters.                              
        }
        await writer.FlushAsync();
    }
}

任何专家都知道这段代码出了什么问题吗?如何使用“records”对象获取完整的csv?我很感激你对此的有价值的回复。

c# memorystream csvwriter
2个回答
0
投票

在尝试从 MemoryStream 读取结果之前,您应该首先刷新/关闭写入器。

using (var mem = new MemoryStream())
{
    using (var writer = new StreamWriter(mem))
    {
        using (var csvWriter = new CsvWriter(writer, csvConfig))
        {
            await csvWriter.WriteRecordsAsync(records);
        }
        await writer.FlushAsync(); // not actually needed, since closing the writer (end of using block) will also trigger flushing
    }
    var csvString = Encoding.UTF8.GetString(mem.ToArray()); // <- should contain all data now
}

0
投票
using var mem = new MemoryStream();
using var writer = new StreamWriter(mem);
using var csvWriter = new CsvWriter(writer, csvConfig);

await csvWriter.WriteRecordsAsync(records);

// Flush the CsvWriter and StreamWriter to ensure all data is written to the MemoryStream.
await csvWriter.FlushAsync();
await writer.FlushAsync();

// Go back to the beginning of the MemoryStream before reading it.
mem.Position = 0;

var csvString = Encoding.UTF8.GetString(mem.ToArray());
© www.soinside.com 2019 - 2024. All rights reserved.