Перед сохранением загруженного 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;
}
Я думаю, это, вероятно, потому, что он пытается записать файл с использованием того же потока, который сейчас находится в конце файла. Я не знаю, как сбросить поток. Я надеялся, что все мои операторы using решат эту проблему.
Так как мне сбросить поток, или это просто отвлекающий маневр?
Обновление: Обнаружено, что длина потока сбрасывается до нуля после прохождение CheckFileWillParse, поэтому похоже, что сброс потока - это отвлекающий маневр, и поток на самом деле каким-то образом блокируется.