我尝试使用LINQtoCSV将CSV文件解析为一个对象列表,并收到错误消息"Stream provided to read is null,or not support seek“。
错误发生在foreach(StockQuote sq in stockQuotesStream)上
下面是抛出错误的方法。.CSV文件是从internet下载的,并且从不存储到磁盘(仅存储到StreamReader)。
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;
}发布于 2012-10-28 07:25:43
答案是先使用MemoryStream,然后使用StreamReader,但我使用它的方式与前面提到的略有不同。
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;
}
}发布于 2012-10-28 05:23:16
.CSV文件是从internet下载的,从不存储到磁盘(只存储到StreamReader)。
好吧,大概这就是问题所在。不太清楚这是什么意思,因为如果你在它周围包装了一个StreamReader,这对于底层流来说是一种痛苦-但你通常不能在从网上下载的流上寻找,而且听起来你使用的代码需要一个可查找的流。
一个简单的选择是将整个流下载到MemoryStream中(如果使用的是.NET 4,则使用Stream.CopyTo ),然后倒回MemoryStream (将Position设置为0)并将其传递给Read方法。
https://stackoverflow.com/questions/13104278
复制相似问题