2010-03-23 17 views
12

Estoy escribiendo un código para agregar archivos adjuntos a una aplicación que estoy creando.¿Cómo convierto una matriz de bytes en un archivo y lo abro automáticamente con C#?

He añadido & Quitar el trabajo, pero no sé por dónde empezar a implementar abierto.

Tengo una matriz de bytes (de un campo de tabla) y no sé cómo hacer que se abra automáticamente, p.

Si tengo una matriz de bytes que es un PDF, ¿cómo hago para que mi aplicación abra automáticamente Acrobat o lo que sea que la aplicación actualmente asignada para la extensión esté usando C#?

+1

supongo que no es una aplicación ASP.NET. La manera más fácil debería ser usar System.Diagnostics.Process.Start(). http://msdn.microsoft.com/fr-fr/library/system.diagnostics.process.start%28VS.80%29.aspx – JoeBilly

Respuesta

16

Para abrirlo en cualquier aplicación externa, tendrá que escribir los bytes en el disco, luego use Process.Start para iniciar la aplicación asociada en el archivo temporal. Simplemente pase el nombre de archivo temporal (con la extensión adecuada) como único argumento, el Process.Start, y se abrirá ese archivo en la aplicación correspondiente.

Algunas aplicaciones pueden tener una forma de alimentar una secuencia de bytes, pero esto debería ser manejado explícitamente por la aplicación de destino.


Para código de ejemplo, se podría hacer algo como:

byte[] filedata = GetMyByteArray(); 
string extension = GetTheExtension(); // "pdf", etc 

string filename =System.IO.Path.GetTempFileName() + "." + extension; // Makes something like "C:\Temp\blah.tmp.pdf" 

File.WriteAllBytes(filename, filedata); 

var process = Process.Start(filename); 
// Clean up our temporary file... 
process.Exited += (s,e) => System.IO.File.Delete(filename); 
+0

Además de lo que dijo Reed, es posible proporcionarle al usuario una lista de Abrir con la forma en que lo hace el escritorio de la ventana. Vea aquí: http://stackoverflow.com/questions/1002270/how-does-the-os-know-what-to-do-with-a-file-when-the-open-with-option-is-sel –

+0

¡Este funciona como un regalo para Reed, excepto que ha olvidado escribir los bytes! :-) –

+0

@Ace: gracias, corregido. –

3

Esto puede ayudar un poco

 byte[] bytes = File.ReadAllBytes(@"C:\temp\file.pdf"); 

     string outpath = @"c:\temp\openme.pdf"; 
     File.WriteAllBytes(outpath, bytes); 
     Process.Start(outpath); 

Simplemente escribe el byte [] en el disco y luego lo ejecuta con el aplicación asociada.

+0

Si usa Path.GetTempPath o Path.GetTempFileName, no asuma C: \ Temp. –

+0

Estaba asumiendo que lo reemplazaría con cualquier ruta que debería usar, la pregunta era cómo abrir el documento. No es seguro que sea una ruta temporal en absoluto, la ruta puede provenir de una configuración o un diálogo de guardar, etc. Pero buen punto :) – Mikael

0

Escriba los datos en un archivo temporal y ábralo usando Proceso. Esto usará el programa estándar configurado para el tipo de archivo. (Por ejemplo, txt> Bloc de notas)

 byte[] b = new byte[]{0x0}; 
     var fileName = "c:\\test.txt"; 
     System.IO.File.WriteAllBytes(fileName, b); 
     System.Diagnostics.Process.Start(fileName); 
0
// get the PDF in byte form from the system 
var bytes = GetFileBytes("Some identifier"); 
// get a valid temporary file name and change the extension to PDF 
var tempFileName = Path.ChangeExtension(Path.GetTempFileName(), "PDF"); 
// write the bytes of the PDF to the temp file 
File.WriteAllBytes(tempFileName, bytes); 
// Ask the system to handle opening of this file 
Process.Start(tempFileName); 
Cuestiones relacionadas