Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#]MIME Type file
Forum - C# / VB.NET - [C#]MIME Type file

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 2:50
Martedì, 03/09/2013
Salve, mi ritrovo in situazione da dover verificare il formato di alcuni file per poterli passare alla classe Bitmap, per tanto tutti questi file devono essere immagini bitmap, per la verifica derivando dal php ho pensato di usare il mime type ma ho scoperto che c# non presenta una funzione per risalire al mime type di un file. Dopo qualche ricerca ho notato che tutti gli sviluppatori per risalire al mime type si affidano all'estensione del file. Volevo sapere se questo era un metodo corretto, in quanto io potrei benissimo avere un file audio e rinominarlo con estensione .jpg ma esso rimarrà sempre un file audio e quindi non adatto alla classe Bitmap. Che metodo dovrei usare per essere sicuro di non passare file non immagine alla suddetta classe?
Grazie in anticipo

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 8:53
Martedì, 03/09/2013
I file binari iniziano in genere con un magic number (per esempio 0x42 0x4D per i file .bmp), dunque puoi verificarli per ogni file.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 12:43
Martedì, 03/09/2013
Ok grazie, non avendo lavorato mai direttamente sul codice binario mi sapresti renderizzare a una guida, un esempio o solo darmi una definizione universale di questo codice?
Grazie

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 14:31
Martedì, 03/09/2013
È solo un modo di rappresentare i numeri, ma con "file binari" in genere si intende file che non sono file testuali, anche se non esiste una differenza concreta tra i due, visto che i file testuali anch'essi sono file binari. Inoltre anche se ho detto binari, ti ho dato il magic number in esadecimale, che è un altro sistema numerico, dove ci sono 16 cifre (da 0 a F), e che, nella notazione di C e derivati, vengono preceduti da "0x", per distinguerli dai numeri decimali e ottali. "0x42 0x4D" (avrei anche potuto scrivere "0x424D", ma ho evitato per evitare problemi con l'endianness) sono i primi due byte che si trovano in ogni file .bmp. Nello standard ASCII, 0x42 è il numero assegnato alla lettera "B", e 0x4D è assegnato alla lettera "M": dunque i file .bmp iniziano con due caratteri. Quindi, per verificare se è un file .bmp, puoi leggerlo come se fosse un file di testo, controllando se le prime due lettere sono "B" e "M". I file .bmp non sono gli unici ad iniziare con lettere, anzi, molto spesso i magic number dei file binari corrispondono a lettere ASCII, dunque puoi fare lo stesso con gli altri file immagine.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:42
Martedì, 03/09/2013
Si avevo capito, ma credevo che il modo piu semplice fosse lavorare direttamente sul binario e non sui codici esadecimali del file, ma va beh piu che altro adesso sto cercando di trovare un metodo che risalga dal file al magic number in questione, precisamente quali caratteri devo leggere? devo partire proprio dall'inizio del file? quanti caratteri sono, 6?

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 15:06
Martedì, 03/09/2013
È più semplice lavorare in esadecimale (e in generale con potenze di 2, come l'ottale, ormai poco utilizzato) perché una sua cifra rappresenta direttamente 4 cifre binarie, dunque è più corto, infatti servono esattamente 2 cifre esadecimali per rappresentare un byte. I magic number si trovano quasi sempre all'inizio, e la loro dimensione varia da formato a formato. "BM" sono due caratteri (in ASCII, ISO-8859, UTF-8, ecc., corrispondono a due byte).

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 15:28
Martedì, 03/09/2013
Se per ogni tipologia di file il codice cambia di lunghezza come è possibile individuarlo a livello di codice? C'è un marcatore che lo delinea?

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 15:46
Martedì, 03/09/2013
Non c'è nessun marcatore, potresti leggere in base all'estensione (se è .bmp leggi due byte e controlli se sono "BM", se è png leggi 8 byte e controlli se sono 0x89504E470D0A1A0A, ecc.), oppure leggi più byte del necessario e poi controlli solo quelli all'inizio.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 19:49
Martedì, 03/09/2013
Ok grazie ma vorrei non dipendere in alcun modo dall'estensione del file che potrebbe anche essere assente o errata

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo