Domanda

Ho un'app winforms che memorizza il contenuto dei file in un database. I file memorizzati possono essere di qualsiasi tipo (parola, Excel, PDF, testo, immagine ...) che l'utente può selezionare praticamente su qualsiasi tipo di file da caricare.

L'utente può quindi interrogare il database, trovare un file e quindi aprirlo.

Non ho problemi ad estrarre l'array di byte dal database, sia come stream che come array di byte.

Idealmente sarei in grado di visualizzare il file direttamente da un array o flusso di byte; al momento lo sto salvando come file temporaneo e poi lo apro con:

Process.Start(fileName);

Come posso visualizzare il file con l'applicazione associata da uno qualsiasi dei byte array o dal file di flusso?

È stato utile?

Soluzione

In Windows, l'unica opzione è fare esattamente quello che stai facendo. Outlook, Internet Explorer, Firefox, lo fanno tutti

Altri suggerimenti

Forse vuoi fare un po 'di ricerca su Memory Mapped File.

puoi provare ad aprire la directory che la contiene, ma sarà la stessa cosa che stai facendo in questo momento .. se l'app associata è conosciuta dal sistema operativo, allora non ci saranno problemi ..

Se si memorizza un nome file nel DB insieme al flusso di byte, è possibile determinare il tipo di file dall'estensione. Ci sono due opzioni in questo caso:

  1. Utilizza il registro per determinare quale applicazione utilizzare. Per maggiori informazioni, dai un'occhiata a questa conversazione su bytes .com .
  2. P / Invoke SHGetFileInfo a determinare quale applicazione utilizzare.

NB: Con entrambe le opzioni dovrai ancora scrivere i dati del file in un file temporaneo su disco per caricarlo.

Personalmente, penso che ciò che stai facendo sia probabilmente l'opzione più semplice, a meno che tu non voglia fornire visualizzatori personalizzati per determinati tipi di file, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top