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
Pascal - Assegnato un file come controllare che tipo è
Forum - Pascal - Assegnato un file come controllare che tipo è

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Ciao a tutti. La mia domanda è come, assegnato un file esistente e trovato, si può restituire che tipo di file è...
Mi spiego:
Ho ad esempio FileExists('Ciao.txt')... mi serve una funzione che ti dica: Ciao.txt è un file di testo (non proprio così ma il concetto è quello); ma non attraverso l'estensione in sè per sè, ma proprio con un analisi nella costituzione del file...
Spero di essermi spiegato
Grazie mille

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 19:53
Martedì, 09/03/2010
mooolto semplice: una volta che conosci tutte i nomi dei file basta che guardi le ultime tre lettere della stringa per scoprire l'estensione del file. Sei vuoi fare il preciso, invece di guardare le ultime tre scorri tutta la stringa al cotrario e ti fermi appena trovi un "." .

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:04
Martedì, 09/03/2010
Ma ho già scritto che non devo conoscere il file MEDIANTE L'ESTENSIONE!  Se io prendo file.avi e lo rinomino in file.txt, il file sarà comunque un video, non un file di testo.
Ecco io devo capire COME SCOPRIRE il tipo di file NON dall'estensione, ma dalla configurazione dello stesso file...
Mi sono spiegato?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:47
Martedì, 09/03/2010
Non puoi farlo perchè non c'è modo di essere sicuri ...

Un file è una sequenza di byte. Non c'è altro che possa dirti di che "tipo" file si tratti ...

Ad esempio, per farti capire, una immagine JPG ha un formato con una precisa struttura del file (caratteri particolari, strutture ben precise) ma si potrebbe replicare il tutto senza che quella sia una immagine ...

Mi sono spiegato?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 21:39
Martedì, 09/03/2010
un metodo empirico, ma abbastanza buono, sarebbe quello di implementare una serie di "filtri".

Ciascun file binario ha un particolare header, che contiene spesso dei magic numbers, informazioni sulla lunghezza del file e altri dati. Beh, quasi tutti...

Il metodo consiste nell'implementare, ad esempio, un certo numero di lettori di headers (ad esempio uno per i file pcx, uno per i jpg, uno per gli avi, ecc...), lanciarli tutti verso un certo file, e contare il numero di "errori" o incongruenze che vengono rilevati.

Ad esempio, se ho un file exe, mi aspetto che da qualche parte nell'header ci sia la sequenza di caratteri MZ (appena all'inizio dell'header), un campo che mi dice la lunghezza totale del file, ecc... Se testando un file con il filtro per gli exe non trovo la sequenza MZ, allora posso scartare l'ipotesi dell'exe e testare con il prossimo filtro (magari potrebbe essere una jpg o altro...) finchè non trovo un filtro che mi dice "Hey, questo file è un XXX valido!"

L'inconveniente di questo metodo è che devi studiare ed implementare i filtri di lettura di vari tipi di formati diversi, implementando correttamente tutti gli eventuali check di integrità (alcuni usano CRC, altri usano un banale checksum, altri ancora potrebbero avere metodi customizzati, ad esempio nelle immagini PCX devi controllare che base x altezza x bytePerPixel corrispondano al dataSize, e questi sono tutti dati presenti nell'header).

Nel vecchio AmigaOS questo problema era risolto dal meccanismo dei Datatypes. Un componente centralizzato del sistema operativo conteneva tutti i filtri per tutti (o quasi) i tipi di files gestiti dal sistema, e ogni programma, invece di implementare N volte il codice per leggere un certo tipo di file, poteva chiamare le routine di apertura e salvataggio per quel file direttamente dal Datatype del sistema operativo (stiamo parlando di tecnologia avanzata, eh! cose che windows, linux e mac si sognano a distanza di ormai più di 20 anni!).

Spero di averti dato qualche spunto utile per i tuoi esperimenti ;) ciao!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:11
Martedì, 09/03/2010
Ma anche se scrivo un file facendolo iniziare per MZ, non significa che sia un eseguibile ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 11:31
Mercoledì, 10/03/2010
@nessuno: si lo so... bisogna anche controllare il CRC presente nell'header e altre cose... e comunque posso sempre creare un header valido con dei dati senza significato... non è una soluzione definitiva e sicura al 100% la mia, però è una soluzione che funziona in una buona maggioranza di casi...

PS: mi hai fatto venire in mente un esperimento che feci diversi anni fa, per aumentare la capacità dei CD-Rom... Come sai, in formato CD-DA manca un layer di correzione errori, quindi la capacità reale è di circa 800MB (anzichè 650MB). Per sfruttare questo spazio in più, avevo programmato un piccolo tool che comprimeva in zip una serie di files e poi costruiva un header Wav PCM valido da applicare sopra questo file zip. Il tutto veniva masterizzato come CD Audio e poteva essere riconvertito in zip semplicemente rippando il CD e togliendo l'header falso. Il risultato era molto buono, a patto di rinunciare al livello di correzione errori C3... :)
Ovviamente una routine di rilevamento qualsiasi avrebbe semplicemente fallito nel rilevare quel file come zip, mentre avrebbe dato l'ok con il check per file Wav PCM. Ed è proprio su questo comportamento che mi ero basato per sperimentare quella tecnica! (Ovviamente ascoltandolo con lo stereo, emetteva suoni simili a quelli delle cassette del C64... :D)

Comunque, che io sappia, non ci sono tecniche sicure per tutti i tipi di files, bisogna andare a tentativi e accontentarsi di una certa percentuale di incertezza...

Ultima modifica effettuata da TheKaneB il 10/03/2010 alle 11:32
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:51
Mercoledì, 10/03/2010
porca miseria:-|...
Complimenti per quello che hai fatto ma sinceramente io non ci ho capito niente :rotfl:
le mie conoscenze si fermano a programmini molto basilari per sfruttare la matematica niente di più...
grazie comunque dei consigli!!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:09
Mercoledì, 10/03/2010
Testo quotato

Postato originariamente da TheKaneB:
PS: mi hai fatto venire in mente



Appunto ... è facilissimo inserire dati in un file spacciandolo per un altro tipo ...

E' vero che l'incertezza può essere "piccola" ma bisogna vedere quanto deve essere la "certezza" richiesta dal programma ...



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo