Ian Cotterill Ian Cotterill - 1 year ago 211
C# Question

CsvHelper not writing anything to memory stream

I have the following method:

public byte[] WriteCsvWithHeaderToMemory<T>(IEnumerable<T> records) where T : class
using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream))
using (var csvWriter = new CsvWriter(streamWriter))

return memoryStream.ToArray();

Which is being called with a list of objects - eventually from a database, but since something is not working I'm just populating a static collection. The objects being passed are as follows:

using CsvHelper.Configuration;

namespace Application.Models.ViewModels
public class Model
[CsvField(Name = "Field 1", Ignore = false)]
public string Field1 { get; set; }

[CsvField(Name = "Statistic 1", Ignore = false)]
public int Stat1{ get; set; }

[CsvField(Name = "Statistic 2", Ignore = false)]
public int Stat2{ get; set; }

[CsvField(Name = "Statistic 3", Ignore = false)]
public int Stat3{ get; set; }

[CsvField(Name = "Statistic 4", Ignore = false)]
public int Stat4{ get; set; }

What I'm trying to do is write a collection to a csv for download in an MVC application. Every time I try to write to the method though, the MemoryStream is coming back with zero length and nothing being passed to it. I've used this before, but for some reason it's just not working - I'm somewhat confused. Can anyone point out to me what I've done wrong here?


Answer Source

Put csvWriter.Flush(); before you return to flush the writer/stream.

EDIT: Per Jack's response. It should be the stream that gets flushed, not the csvWriter. streamWriter.Flush();. Leaving original solution, but adding this correction.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download