CsvHelper 不将数据写入内存流
CsvHelper not writing data to memory stream
在使用 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
是为了每个 row/line 收集 几个 字段,它会自己做一些缓冲,直到你告诉它当前记录完成:
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
在使用 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
是为了每个 row/line 收集 几个 字段,它会自己做一些缓冲,直到你告诉它当前记录完成:
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