首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供给读取的LINQtoCSV流为空,或者不支持seek

提供给读取的LINQtoCSV流为空,或者不支持seek
EN

Stack Overflow用户
提问于 2012-10-28 05:19:08
回答 2查看 1.1K关注 0票数 2

我尝试使用LINQtoCSV将CSV文件解析为一个对象列表,并收到错误消息"Stream provided to read is null,or not support seek“。

错误发生在foreach(StockQuote sq in stockQuotesStream)

下面是抛出错误的方法。.CSV文件是从internet下载的,并且从不存储到磁盘(仅存储到StreamReader)。

代码语言:javascript
复制
    public List<StockQuote> CreateStockQuotes(string symbol)
    {
        List<StockQuote> stockQuotes = new List<StockQuote>();

        CsvFileDescription inputFileDescription = new CsvFileDescription
        {
            SeparatorChar = ',',
            FirstLineHasColumnNames = false
        };

        CsvContext cc = new CsvContext();

        IEnumerable<StockQuote> stockQuotesStream = cc.Read<StockQuote>(GetCsvData(symbol));

        foreach (StockQuote sq in stockQuotesStream)
        {
            stockQuotes.Add(sq);
        }

        return stockQuotes;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-28 07:25:43

答案是先使用MemoryStream,然后使用StreamReader,但我使用它的方式与前面提到的略有不同。

代码语言:javascript
复制
        WebClient client = new WebClient();

        using (MemoryStream download = new MemoryStream(client.DownloadData(url)))
        {
            using (StreamReader dataReader = new StreamReader(download, System.Text.Encoding.Default, true))
            {
                return dataReader;
            }
        }
票数 1
EN

Stack Overflow用户

发布于 2012-10-28 05:23:16

.CSV文件是从internet下载的,从不存储到磁盘(只存储到StreamReader)。

好吧,大概这就是问题所在。不太清楚这是什么意思,因为如果你在它周围包装了一个StreamReader,这对于底层流来说是一种痛苦-但你通常不能在从网上下载的流上寻找,而且听起来你使用的代码需要一个可查找的流。

一个简单的选择是将整个流下载到MemoryStream中(如果使用的是.NET 4,则使用Stream.CopyTo ),然后倒回MemoryStream (将Position设置为0)并将其传递给Read方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13104278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档