2

I want to download the created CSV file without saving it in a predefined path. I'm using CSVHelper Library. (Website is not MVC based). Following is the code I'm using now.

        using (var writer = new StreamWriter("path\\to\\file.csv"))
        using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
        using (var CHAIN = dt)
        {
            
            foreach (DataColumn column in CHAIN.Columns)
            {
                csv.WriteField(column.ColumnName);
            }
            csv.NextRecord();

          
            foreach (DataRow row in CHAIN.Rows)
            {
                for (var i = 0; i < CHAIN.Columns.Count; i++)
                {
                    csv.WriteField(row[i]);
                }
                csv.NextRecord();
            }
        }

But I need to download the csv file directly into the browser without defining a path from StreamWriter.

1 Answers1

2

Using MemoryStream this should be possible:

var memoryStream = new MemoryStream();
using (var writer = new StreamWriter(memoryStream)) {
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    using (var CHAIN = dt)
    {
    
        foreach (DataColumn column in CHAIN.Columns)
        {
            csv.WriteField(column.ColumnName);
        }
        csv.NextRecord();

  
        foreach (DataRow row in CHAIN.Rows)
        {
            for (var i = 0; i < CHAIN.Columns.Count; i++)
            {
                csv.WriteField(row[i]);
            }
            csv.NextRecord();
        }
    }
    writer.Flush();
}

memoryStream.Seek(0, SeekOrigin.Begin);
var resultInBytes = memoryStream.ToArray();
memoryStream.Close();
return resultInBytes;

You can return the MemoryStream as a response the following example is just an option, since I don't know what technology are you using so this webforms related code may help you:

Response.Clear();
Response.ContentType = "text/csv"; // or application/force-download
Response.AddHeader("content-disposition", "attachment;    filename=name_you_file.csv");
Response.BinaryWrite(resultInBytes);
Response.End();
Richárd Baldauf
  • 1,068
  • 2
  • 10
  • 24