I need to read csv file twice. but after first reading:
using (var csvReader = new StreamReader(file.InputStream))
{
fileFullText += csvReader.ReadToEnd();
file.InputStream.Seek(0, SeekOrigin.Begin);
csvReader.Close();
}
using file in enother function:
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;
}
}
The file.Length is 0.
Can anybody help?
The reason is that
SteramReader‘sDispose()method also closes the underlying stream; In your casefile.InputStream. Theusingstatement callsDispose()implicitly. Try to replace using with disposes of both yourStreamReaded-s after you finished both read operations. As I remember some stream classes have a bool option to leave underlying stream open after dispose..NET 4.5 fixed this issue by introducing
leaveOpenparameter inSteamReaderconstructor. See: MSDNOne more thing. You do not need to close
SteramReaderyourself (the line withcsvReader.Close();) when you wrap it inusingstatement, thusDispose()andClose()are the same in case ofStreamReader.