2

FileHelpersを使用して、ASP.NET アプリにアップロードされた CSV ファイルを解析しています。

2 つの異なる CSV ファイル構造 (つまり、列の数が異なる) がアップロードされるため、解析する構造のモデルを使用して FileHelpers エンジンを作成する前に、ファイルの最初の行を次のように読み取ります。

string line = "";

using (StreamReader reader = new StreamReader(file.InputStream))
{
    line = reader.ReadLine();
}

int fieldCount = line.Count(l => l == ',');

これは機能し、列数が表示されますが、他にやりたいことは何もありませんfile.InputStream:

var engine = new FileHelperEngine<CSVModel>();
CSVModel[] records;
records = (CSVModel[])engine.ReadStream(new StreamReader(file.InputStream),
    Int32.MaxValue);
// etc etc

なぜこれが起こるのですか?StreamReader を削除して手動で close()しようとしましたusingが、役に立ちません。

4

2 に答える 2

1

発生している問題は、組み込みの Stream クラスが、それら自体が破棄または閉じられると、基になるストリームを破棄するためです。

直感に反するように、ストリームをまだ使用している場合はストリームを閉じないか、アクセスする前に再度開くか、複数で使用する場合は MemorStream にコピーする必要があります。場所。

この質問にはいくつかの説明があります。

編集:(ジムのコメントの後)

または、コンストラクターでパラメーターを使用して、基になるストリームを閉じないように StreamReader に通知することもできます。( MSDN ドキュメント)

于 2013-09-18T14:08:15.253 に答える
0

最初の読み取り後にストリームの位置をリセットする必要があります。

file.InputStream.Position = 0;
于 2013-09-18T13:43:49.873 に答える