Konvertieren Memory zu Filestream Hunderte von identischen Dateien erstellt?
-
05-09-2019 - |
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.
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.