Exibir um arquivo de um byte [] ou fluxo
Pergunta
Eu tenho um winforms aplicativo que armazena o conteúdo de arquivos em um banco de dados. Os arquivos armazenados podem ser de praticamente qualquer tipo (Word, Excel, PDF, texto, imagem ...) o usuário pode selecionar praticamente qualquer tipo de arquivo para carregar.
O usuário pode, em seguida, consultar o banco de dados, encontrar um arquivo e, em seguida, abri-lo.
Eu não tenho problemas ao extrair a matriz de bytes a partir do banco de dados, ou como um riacho ou um array de bytes.
Idealmente, eu seria capaz de exibir o arquivo diretamente a partir de uma matriz de bytes ou fluxo; no momento eu estou salvando-o como um arquivo temporário e, em seguida, abrir isso com:
Process.Start(fileName);
Como posso exibir o arquivo com o aplicativo associado quer a partir de qualquer um dos ficheiro matriz de bytes ou fluxo?
Solução
Nas janelas, sua única opção é fazer exatamente o que você está fazendo. Outlook, Internet Explorer, Firefox, tudo isso
Outras dicas
Talvez você quer pesquisar um pouco na memória de ficheiros mapeada.
Você pode tentar abrir o diretório que contém-lo, mas ele vai ser a mesma coisa que você está fazendo agora .. se o aplicativo associado é conhecido pelo sistema operacional, então não haverá nenhum problema ..
Se você armazenar um nome de arquivo no DB juntamente com o fluxo de bytes, você pode determinar o tipo de arquivo da extensão. Há duas opções neste caso:
- Use o registro para determinar qual aplicativo para uso. Para mais informações sobre isso, dê uma olhada nesta conversa sobre bytes .com .
- P / Invoke SHGetFileInfo para determinar qual aplicativo para uso.
NB:. Com as duas opções, você ainda vai precisar para gravar os dados de arquivo para um arquivo temporário no disco, a fim de carregá-lo
Pessoalmente, eu acho que você está fazendo é, provavelmente, a opção mais fácil, de qualquer maneira (a menos que você gostaria de oferecer aos telespectadores personalizados para certos tipos de arquivos, etc)