我确实有一个非常简单的问题,但需要很多时间才能找到解决方案。还是没找到,就想在这里发帖。 下面是获取 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?我很感激你对此的有价值的回复。
在尝试从 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
}
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());