Перед сохранением загруженного CSV-файла я хочу проверить, будет ли он анализироваться. Когда я просто сохранял файл, все было хорошо, теперь, когда я сначала его читаю, сохраненный файл пуст.
Вот мой метод действия
[HttpPost]
public ActionResult Import(HttpPostedFileBase file)
{
// Check parse went ok
using (var fileStream = file.InputStream)
{
if (!MemberFileParsingService.CheckFileWillParse(fileStream))
{
ViewBag.Message = "There was a problem with the file";
return View();
}
}
// Save file so we can work on it in next action
file.SaveAs(Server.MapPath(fileName));
return RedirectToAction("ImportMatch", new { club = ActiveClub.Url });
}
А вот мой метод, который проверяет, нормально ли анализируется файл. Он использует CsvReader для чтения всего файла, чтобы проверить, нет ли ошибок. CsvReader генерирует исключения, когда дело доходит до неверных битов файла.
public static bool CheckFileWillParse(Stream fileStream)
{
try
{
using (var reader = new StreamReader(fileStream))
{
using (CsvReader csv = new CsvReader(reader, false))
{
while (csv.ReadNextRecord()) { }
}
}
}
catch(Exception)
{
return false;
}
return true;
}
Я думаю, что это, вероятно, потому, что он пытается записать файл, используя тот же поток, который сейчас находится в конце файла. Я не знаю, как сбросить поток, хотя. Я надеялся, что все мои операторы использования решат эту проблему.
Так как я могу сбросить поток или это просто красная сельдь?
Обновление: Обнаружено, что длина потока сбрасывается в ноль после прохождения CheckFileWillParse, поэтому похоже, что сброс потока - это просто красная сельдь, и поток фактически как-то блокируется.