Pregunta

Yo soy el acceso a un HttpWebRequest que devuelve un archivo PDF como la respuesta. Estoy leyendo que la respuesta en una secuencia de memoria, y más tarde en la conversión a un archivo. El problema es, es que se crean cientos de archivos. No sé por qué, he intentado muchas maneras, y todos hacen lo mismo ... Este es el primer método que devuelve el MemoryStream.

        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);

En segundo para convertir a FileStream ...

            byte[] data = stream.ToArray();

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

¿Alguna idea?

Editar para agregar más código ...

    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 es la ruta asignada al servidor del archivo a crear.

            byte[] data = stream.ToArray();

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

He intentado stream.WriteTo (fs), y lo mismo ocurre. Bastante rocambolesca.

¿Fue útil?

Solución

No está del todo claro por qué se obtendría varios archivos, pero debe ser capaz de obtener algunos de información basado en los nombres de archivos -. Cada uno correspondería a un valor de newFile

Tomo nota de que no se está cerrando el flujo de archivos, por cierto. Utilizando File.WriteAllBytes es una manera mucho más simple de lograr su objetivo, y no le requiere para cerrar cualquier cosa:

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

Una alternativa es utilizar todavía un FileStream (con una declaración using) pero el uso de MemoryStream.WriteTo para evitar la llamada a ToArray que tiene que copiar todos los datos:

using (FileStream fs = File.Create(newFile))
{
    stream.WriteTo(fs);
}

Otros consejos

Yo sugeriría que usted está recibiendo más solicitudes desde el cliente de lo que cree. Compruebe el archivo de registro de acceso del servidor web. Los fragmentos de código que están mostrando parecen razonables, pero realmente no muestran suficiente del código para explicar el problema - usted no está demostrando la parte derecha del código. De todos modos, compruebe el registro de acceso o utilizar algún tipo de rastreo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top