Frage So öffnen Sie eine Datei aus Memory Stream


Ist es möglich, eine Datei direkt von einem zu öffnen? MemoryStream im Gegensatz zum Schreiben auf die Festplatte und zum Tun Process.Start() ? Speziell eine PDF-Datei? Wenn nicht, denke ich, ich muss das schreiben MemoryStream auf die Festplatte (was irgendwie nervig ist). Könnte mir dann jemand auf eine Ressource hinweisen, wie man eine schreibt MemoryStream auf Festplatte?


5
2018-06-04 11:58


Ursprung


Antworten:


Es hängt vom Client ab :) Wenn der Client Eingaben von stdin akzeptiert, könnten Sie das tun drücken das dta zum Kunden. Eine andere Möglichkeit könnte sein, einen Named-Pipes-Server oder einen Socket-Server zu schreiben - nicht trivial, aber es könnte funktionieren.

Die einfachste Option besteht jedoch darin, einfach eine temporäre Datei zu erfassen und darauf zu schreiben (und anschließend zu löschen).

var file = Path.GetTempFileName();
using(var fileStream = File.OpenWrite(file))
{
    var buffer = memStream.GetBuffer();
    fileStream.Write(buffer, 0, (int)memStream.Length);
}

Denken Sie daran, die Datei zu bereinigen, wenn Sie fertig sind.


7
2018-06-04 12:14



Path.GetTempFileName () gibt den Dateinamen mit der Erweiterung ".tmp" zurück, daher können Sie Process.Start () nicht verwenden, das eine Windows-Dateiverknüpfung über die Erweiterung benötigt.


1
2018-01-06 12:27



Wenn Sie mit dem Öffnen einer Datei so etwas wie das Starten von Adobe Reader für PDF-Dateien meinen, dann müssen Sie es in eine Datei schreiben. Das heißt, es sei denn, die Anwendung stellt Ihnen eine API zur Verfügung.

Eine Möglichkeit, einen Stream in eine Datei zu schreiben, wäre:

using (var memoryStream = /* create the memory stream */)
using (var fileStream = File.OpenWrite(fileName))
{
    memoryStream.WriteTo(fileStream);
}

0
2018-06-04 12:21