2

応答としてPDFファイルを返すhttpwebrequestにアクセスしています。私はその応答をメモリストリームに読み込んでおり、後でファイルに変換しています。問題は、何百ものファイルが作成されていることです。理由はわかりませんが、私は多くの方法を試しましたが、すべて同じです...これはメモリストリームを返す最初のメソッドです。

        MemoryStream memStream = new MemoryStream();
        byte[] buffer = new byte[2048];

        int bytesRead = 0;
        do
        {
            bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length);
            memStream.Write(buffer, 0, bytesRead);
        } while (bytesRead != 0);

FileStreamに変換する2番目...

            byte[] data = stream.ToArray();

            FileStream fs = new FileStream(newFile, FileMode.CreateNew);
            fs.Write(data, 0, data.Length);

何か案は?

編集してコードを追加...

    public MemoryStream GetToStream()
    {
        if (_Req == null)
            throw new Exception("HttpWebRequest is not initialised");

        GetResult(_Req);

        MemoryStream memStream = new MemoryStream();
        byte[] buffer = new byte[2048];

        int bytesRead = 0;
        do
        {
            bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length);
            memStream.Write(buffer, 0, bytesRead);
        } while (bytesRead != 0);

        _ResponseStream.Close();

        if (memStream.Length > 0)
            return memStream;
        else return null;
    }

newFileは、作成するファイルのサーバーへのマップされたパスです。

            byte[] data = stream.ToArray();

            FileStream fs = new FileStream(newFile, FileMode.Create);
            fs.Write(data, 0, data.Length);
            fs.Close();

stream.WriteTo(fs)を試しましたが、同じことが起こります。かなり奇妙です。

4

2 に答える 2

13

複数のファイルを取得する理由はまったくわかりませんが、ファイル名に基づいていくつかのnewFile情報を取得できるはずです。各ファイルはの値に対応します。

ちなみに、ファイルストリームを閉じていないことに注意してください。使用File.WriteAllBytesすることは、目標を達成するためのはるかに簡単な方法であり、何も閉じる必要はありません。

byte[] data = stream.ToArray();
File.WriteAllBytes(newFile, data);

FileStream別の方法は、 (usingステートメントを含む)を引き続き使用することですが、すべてのデータをコピーするMemoryStream.WriteTo必要がある呼び出しを回避するために使用します。ToArray

using (FileStream fs = File.Create(newFile))
{
    stream.WriteTo(fs);
}
于 2009-02-17T07:39:17.730 に答える
0

クライアントから思ったよりも多くのリクエストを受け取っていることをお勧めします。Webサーバーのアクセスログファイルを確認してください。表示しているコードスニペットは妥当なように見えますが、問題を説明するのに十分なコードが表示されていません。コードの正しい部分が表示されていません。とにかく、アクセスログを確認するか、何らかのトレースを使用してください。

于 2009-02-17T07:36:16.490 に答える