Frage

Ich bin den Zugriff auf eine httpwebrequest, die eine PDF-Datei als Antwort zurückgibt. Ich lese, dass die Antwort in einen Speicherstrom und später in eine Datei auf konvertieren. Das Problem ist, ist, dass Hunderte von Dateien erstellt werden. Nicht sicher, warum habe ich viele Möglichkeiten ausprobiert, und alle das gleiche tun ... Dies ist die erste Methode, die die Memorystream zurückgibt.

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

Second Filestream zu konvertieren ...

            byte[] data = stream.ToArray();

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

Irgendwelche Ideen?

EDIT ZU CODE ADD ...

    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 ist der abgebildete Pfad zum Server der Datei zu erstellen.

            byte[] data = stream.ToArray();

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

Ich habe versucht, stream.WriteTo (fs), und gleiche tritt. Ganz bizzare.

War es hilfreich?

Lösung

Es ist nicht klar, warum Sie mehrere Dateien bekommen würde, aber man sollte bekommen können, einige Informationen basierend auf den Dateinamen -. Jedes auf einen Wert von newFile entspräche

Ich nehme zur Kenntnis, dass Sie nicht schließen Sie Ihre Datei-Stream, durch die Art und Weise. Mit File.WriteAllBytes ist eine viel einfachere Art und Weise zu erreichen, Ihr Ziel ist, und verlangen, dass Sie nichts schließen:

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

Eine Alternative ist immer noch ein FileStream zu verwenden (mit einer using Anweisung), sondern verwendet MemoryStream.WriteTo den Anruf zu vermeiden ToArray die alle Daten kopieren hat:

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

Andere Tipps

Ich würde vorschlagen, dass Sie mehr Anfragen von Ihrem Client empfangen, als Sie denken. Überprüfen Sie Ihren Webserver Zugriffsprotokolldatei. Der Code-Schnipsel Sie zeigen scheint vernünftig, aber zeigt nicht wirklich genug von dem Code, um das Problem zu erklären - Sie sind nicht den rechten Teil des Codes zeigen. Wie auch immer, überprüfen Sie das Zugriffsprotokoll oder eine Art von Verfolgung verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top