Как превратить массив байтов обратно в файл и автоматически открыть его с помощью C #? - PullRequest
13 голосов
/ 23 марта 2010

Я пишу код для добавления файловых приложений в приложение, которое создаю.

У меня работает add & Remove, но я не знаю, с чего начать реализацию open.

У меня есть массив байтов (из поля таблицы), и я не знаю, как его автоматически открыть, например.

Если у меня есть массив байтов в формате PDF, как я могу заставить мое приложение автоматически открывать Acrobat или что-то еще, назначенное в настоящее время приложением для расширения, использует C #?

Ответы [ 4 ]

17 голосов
/ 23 марта 2010

Чтобы открыть его в любом внешнем приложении, вам нужно записать байты на диск, а затем с помощью Process.Start запустить соответствующее приложение во временном файле. Просто передайте временное имя файла (с соответствующим расширением) в качестве единственного аргумента Process.Start, и он откроет этот файл в соответствующем приложении.

Некоторые приложения могут иметь способ подачи потока байтов, но это должно быть явно обработано целевым приложением.


Для примера кода вы можете сделать что-то вроде:

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); 
3 голосов
/ 23 марта 2010

Это может помочь немного

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

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

Просто записывает байт [] на диск и затем запускает его с соответствующим приложением.

0 голосов
/ 23 марта 2010
// 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);
0 голосов
/ 23 марта 2010

Запишите данные во временный файл и откройте его, используя Process. Это будет использовать стандартную программу, настроенную для типа файла. (например, txt> notepad)

        byte[] b = new byte[]{0x0};
        var fileName = "c:\\test.txt";
        System.IO.File.WriteAllBytes(fileName, b);
        System.Diagnostics.Process.Start(fileName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...