【发布时间】:2019-11-13 02:23:54
【问题描述】:
我正在尝试使用 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 更有意义。有任何想法吗?
编辑:
我相信 David Specht 是正确的,因为我使用的特定流有一些独特之处。在进一步的测试中,我发现一些字符串确实可以工作。在出现错误的情况下,我正在使用 IFileListEntry.Data 流接口从 Steve Sanderson 的 BlazorInputFile 组件(在 GitHub 上)读取流。我怀疑它的实现中有一些东西会导致我遇到错误。如果是这种情况,那么解决方法会很有帮助。 (也许从另一个流创建一个流以在异步和同步流之间切换?还不确定如何做到这一点,但我会试一试。)
【问题讨论】:
标签: csv stream streamreader blazor csvhelper