Подтвердить что ты не робот

Как превратить массив байтов в файл и автоматически открыть его с помощью С#?

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

У меня есть добавление и удаление работы, но я не знаю, с чего начать открывать.

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

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

4b9b3361

Ответ 1

Чтобы открыть его в любом внешнем приложении, вам необходимо записать байты на диск, а затем использовать 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); 

Ответ 2

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

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

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

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

Ответ 3

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

        byte[] b = new byte[]{0x0};
        var fileName = "c:\\test.txt";
        System.IO.File.WriteAllBytes(fileName, b);
        System.Diagnostics.Process.Start(fileName);

Ответ 4

// 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);