2015-04-17 14 views
5

Sto provando a fare un programma client-server in cui è possibile condividere il contenuto degli appunti.Copia array di byte negli appunti

In questo momento sono in grado di condividerlo se il tipo di contenuto è audio, immagine o testo. L'idea è che si converte il contenuto in un array di byte, inviarlo, riconvertirlo nel suo tipo originale (Stream, BitmapSource o string) e iniettare nella clipboard client utilizzando i metodi Clipboard.SetAudio, Clipboard.SetImage o Clipboard.SetText.

Il mio problema è quando ci sono alcuni file negli appunti. Io uso il metodo Clipboard.GetFileDropList per ottenere un elenco dei file e per ciascun file nell'elenco lo converto in un array di byte e lo invio al client. Come posso iniettare questo array di byte negli appunti del cliente?

So che esiste il metodo Clipboard.SetFileDropList, ma mi richiede di fornire un elenco di file e poiché il file non esiste sul client non posso usarlo.

Come posso risolvere questo problema?

+1

Se non c'è niente di meglio, è possibile ricreare il file in una cartella temporanea, quindi copiarlo. Questo è quello che Mouse Without Borders fa, penso che non sia una coincidenza –

risposta

3

Per fare in modo che il client consideri i file come passabili, dovranno esistere sul filesystem del client in qualche modo, poiché gli appunti prevedono un elenco di nomi di file quando si impostano i contenuti degli appunti.

questo può essere fatto con il trasferimento dei dati come un flusso al vostro cliente, e poi fare il cliente disfare subito che flusso in una cartella temporanea, il percorso in cui è ottenibile tramite:

var temp = Environment.ExpandEnvironmentVariables("%TEMP%"); 

Una volta fatto e i file sono posizionati, è possibile posizionarli negli appunti come se fossero quelli copiati.

Si noti che il supporto del copia/incolla del file invece di avere un'opzione per "trasferire" i file potrebbe essere eseguito molto più lentamente di altre operazioni, a causa di come i file di grandi dimensioni possono ottenere.

+0

Ho pensato di usare questo approccio, ma mi chiedevo se ce ne fossero di migliori. La mia preoccupazione è che potrebbe esserci uno spreco di memoria se i file trasferiti sono grandi. Ad ogni modo proverò a implementare ciò che mi hai suggerito. –