将CsvHelper与流一起使用

问题描述 投票:0回答:1

我正在尝试使用CsvHelper读取CSV文件并从中创建一个DataTable。第一行将是提供列名称的​​头记录,但除此之外,文件的结构是未知的。如果我使用以下代码(摘自CsvHelper的作者的示例),则它可以工作。

using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader))
{
    // Do any configuration to `CsvReader` before creating CsvDataReader.
    using (var dr = new CsvDataReader(csv))
    {        
        var dt = new DataTable();
        dt.Load(dr);
    }
}

但是,如果我为StreamReader使用替代构造函数,该构造函数将Stream作为参数而不是文件路径,则CsvDataReader的创建将失败,并显示错误消息“不支持同步读取”。

我尝试了CsvHelper的其他几种方法来尝试以不同的方式处理数据,但是在通过传递Stream而不是文件路径创建StreamReader的任何时候,我都会遇到相同的错误。我开始怀疑真正的问题在于StreamReader的实现还是CsvHelper。在我的情况下(使用Blazor Server应用程序),在Stream中传递更为有意义。有任何想法吗?

c# csv stream streamreader csvhelper
1个回答
0
投票

可能您正在使用的流需要异步读取?以下对我有用。

var request = WebRequest.Create("https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv");
var response = request.GetResponse();

using (var stream = response.GetResponseStream())
using (var csv = new CsvReader(new StreamReader(stream)))
{
    using (var dr = new CsvDataReader(csv))
    {
        var dt = new DataTable();
        dt.Load(dr);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.