2011-06-04 71 views
5

¿Es posible abrir un archivo directamente desde un MemoryStream opuesto a escribir en un disco y hacer Process.Start()? Específicamente un archivo pdf? Si no, supongo que necesito escribir el MemoryStream en el disco (que es un poco molesto). ¿Podría alguien entonces dirigirme a un recurso sobre cómo escribir un MemoryStream en el Disco?Cómo abrir un archivo desde Memory Stream

+0

(James - Eliminé la dependencia 4.0 de mi respuesta) –

Respuesta

7

Depende del cliente :) si el cliente acepta la entrada de stdin puede empujar dta al cliente. Otra posibilidad podría ser escribir un servidor named-pipes o un socket-server, no trivial, pero podría funcionar.

Sin embargo, la opción más simple es simplemente tomar un archivo temporal y escribirlo (y eliminarlo después).

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

Recuerde que debe limpiar el archivo cuando haya terminado.

+0

O use 'WriteTo' (para no 4.0) – Magnus

+0

@Magnus - Lo eliminé; se dio cuenta de que puedo usar el back-buffer de MemoryStream –

0

Si abre un archivo, quiere decir algo así como iniciar Adobe Reader para archivos PDF, entonces sí, tiene que escribirlo en un archivo. Es decir, a menos que la aplicación le proporcione alguna API, haga eso.

Una manera de escribir una corriente a presentar sería:

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

Path.GetTempFileName() devuelve el nombre del archivo con la extensión '.tmp', por lo tanto, se utiliza cant't Process.Start() que necesita asociación de archivos de Windows a través de la extensión.

Cuestiones relacionadas