我需要两次读取csv文件.但在第一次阅读后:
using (var csvReader = new StreamReader(file.InputStream))
{
fileFullText += csvReader.ReadToEnd();
file.InputStream.Seek(0, SeekOrigin.Begin);
csvReader.Close();
}
Run Code Online (Sandbox Code Playgroud)
在另一个函数中使用文件:
public static List<string> ParceCsv(HttpPostedFileBase file)
{
//file.InputStream.Seek(0, SeekOrigin.Begin);
using (var csvReader = new StreamReader(file.InputStream))
{
// csvReader.DiscardBufferedData();
// csvReader.BaseStream.Seek(0, SeekOrigin.Begin);
string inputLine = "";
var values = new List<string>();
while ((inputLine = csvReader.ReadLine()) != null)
{
values.Add(inputLine.Trim().Replace(",", "").Replace(" ", ""));
}
csvReader.Close();
return values;
}
}
Run Code Online (Sandbox Code Playgroud)
file.Length是0.有人可以帮忙吗?
Geo*_*dze 11
其原因是,SteramReader的Dispose()方法还关闭底层流; 在你的情况下file.InputStream.该using声明Dispose()含蓄地调用.StreamReaded在完成两个读取操作后,尝试替换使用处理两个-s.我记得有些流类有一个bool选项,可以在处理后打开底层流.
.NET 4.5通过leaveOpen在SteamReader构造函数中引入参数来解决此问题.请参阅:MSDN
public StreamReader(
Stream stream,
Encoding encoding,
bool detectEncodingFromByteOrderMarks,
int bufferSize,
bool leaveOpen
)
Run Code Online (Sandbox Code Playgroud)
还有一件事.你并不需要关闭SteramReader自己(与线csvReader.Close();),当你把它包在using声明中,从而Dispose()和Close()是相同的情况下StreamReader.
| 归档时间: |
|
| 查看次数: |
7166 次 |
| 最近记录: |