Отобразить файл из байта [] или потока - PullRequest
1 голос
/ 01 декабря 2009

У меня есть приложение winforms, которое хранит содержимое файлов в базе данных. Сохраненные файлы могут быть любого типа (word, excel, PDF, text, image ...), пользователь может выбрать для загрузки практически любой тип файла.

Затем пользователь может запросить базу данных, найти файл и затем открыть его.

У меня нет проблем с извлечением байтового массива из базы данных в виде потока или байтового массива.

В идеале я бы мог отображать файл напрямую из байтового массива или потока; на данный момент я сохраняю его как временный файл, а затем открываю его с помощью:

Process.Start(fileName);

Как я могу отобразить файл со связанным приложением из любого байтового массива или файла потока?

Ответы [ 4 ]

3 голосов
/ 01 декабря 2009

В Windows ваш единственный вариант - делать именно то, что вы делаете. Outlook, Internet Explorer, Firefox, все это делают

0 голосов
/ 01 декабря 2009

Если вы сохраняете имя файла в БД вместе с потоком байтов, вы можете определить тип файла по расширению. В этом случае есть два варианта:

  1. Используйте реестр, чтобы определить, какое приложение использовать. Для получения дополнительной информации об этом посмотрите этот разговор на bytes.com .
  2. P / Invoke SHGetFileInfo , чтобы определить, какое приложение использовать.

NB: При использовании обеих опций вам все равно потребуется записать данные файла во временный файл на диске для его загрузки.

Лично я думаю, что то, что вы делаете, - это, пожалуй, самый простой вариант (если вы не хотите предоставлять специальные средства просмотра для определенных типов файлов и т.д.)

0 голосов
/ 01 декабря 2009

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

0 голосов
/ 01 декабря 2009

Может быть, вы хотите немного изучить файл сопоставления памяти.

...