我可以直接下载 csv 文件而不使用 csvhelper 定义文件路径吗?

Can I download csv file directly without defining a file path using csvhelper?

我想下载创建的 CSV 文件而不将其保存在预定义的路径中。我正在使用 CSVHelper 库。 (网站不是基于 MVC 的)。以下是我现在使用的代码。

        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();
            }
        }

但我需要直接将csv文件下载到浏览器中,而无需定义StreamWriter的路径。

使用MemoryStream这应该是可能的:

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;

您可以 return MemoryStream 作为回应,以下示例只是一个选项,因为我不知道您使用的是什么技术,所以此 webforms 相关代码可能对您有所帮助:

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();