アップロードされたcsvファイルを保存する前に、解析するかどうかチェックします。私がちょうどファイルをすべて保存していたときに、それが最初に読み込まれたので、保存されたファイルは空白になりました。ここで保存する前にHttpPostedFileを読み込むと、ASP.NET MVCに空のファイルが保存されます
は私のアクションメソッド
[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 });
}
であり、ここでファイルがOK解析しているかどうかをチェックし、私の方法です。 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を経て、ストリームの長さがゼロにリセットされるが見つかりました。
HttpInputStreamオブジェクトからStreamReaderを作成し、ヘッダーが正しいことを確認するための行を読み込んだり、ストリームを(第三者のライブラリに)再利用したりする場合も同じことが起こります。ファイルの先頭を探したり、その行を返すことはできないようです。最も迷惑な! –