1

同じファイルを 2 回読み取ろうとしています。

を使用しFileUploadてファイルを検索しています。C# ans asp.net の次のコードを使用して、ファイルの行数を確認する最初の読み取りに成功しました。

Stream data_file;
data_file=FileUpload1.PostedFile.InputStream;
string line;
int elements;
StreamReader sr = new StreamReader(data_file);
line = sr.ReadLine();
while (line != null)
{
elements = elements + 1;
line = sr.ReadLine();
}
sr.Close();

この数を使用して、配列が保持する要素の数を最初に設定することで、配列の配列を作成できるようになりました。今回の配列は、次のようなファイルからの番号を保持します。

データファイル:

1,1

2,3

配列L[0][0]=1

配列L[0][1]=1

配列L[1][0]=2

配列L[1][0]=3

これを行うコードは次のとおりです。

double [][] dime= new double [elements][];
string[] div;
string line2;
int nn=0;
StreamReader ssr = new StreamReader(data_file);
line2 = ssr.ReadLine();
while (line2 != null)
{
dimen[nn] = new double[2];
for (int m2 = 0; m2 < 2; m2++)
{
div=line2.Split(new Char[] { ' ', ',', '\t' });
dimenc[nn][m2] = Convert.ToDouble(div[m2]);
}
nn=nn+1;
line2 = ssr.ReadLine();
}
ssr.Close();

ただし、配列は空であると言っていますが、コードの2番目の部分を完全に異なるメソッド/ 2番目のボタンで使用したかどうかはわかっていますが、同じメソッドにある場合は機能しないため、私の質問は次のとおりです。

どうしたの?2 番目のストリームリーダーが機能しないのはなぜですか?

4

1 に答える 1

1

実際には、@NLemayコメントがおそらくより良い解決策です。

ただし、誰かがアップロードされたファイルを2回読み取る必要がある場合は、ファイルをメモリにキャッシュする必要があります。ストリームをbyte[]またはにMemoryStream読み込んでから、そこからストリームリーダーを操作します。あなたはそれHttpPostedFile.InputStream.CanSeekが間違っていることに気付くでしょう、それはあなたがやろうとしていることです。

の場合byte[]

HttpPostedFile uFile = uploadFile.PostedFile;

byte[] data = new byte[uFile.ContentLength];
uFile.InputStream.Read(data, 0, uFile.ContentLength);

CopyStreamメソッドMemoryStreamを検索します

于 2012-11-16T16:48:41.460 に答える