Attento che l'estensionsene può essere ingannevole; ad esempio un file .ogg può essere audio e/o video.
Potrebbe essere una soluzione usare la funzione shell unitamente al comando bash file. Qualcosa del tipo:
Dim sFile As String
Shell "file " & User.home &/ "Music" &/ "Josh.ogg" To sFile
la stringa sFile conterrà la descrizione del tipo di file
Se il fine del programma è di "
far distinguere direttamente dal programma", (come
mi pare chiedeva Lux), un preciso "
tipo" di file fra diversi con la medesima estensione, entrambe le soluzioni da noi proposte, seppur interessanti, non bastano.
Sia riguardo alla tua soluzione che alla mia, pertanto, a mio modesto parere, Lux dovrà far effettuare dal programma comunque un'analisi capace di
individuare il
tipo di file voluto:
- nella tua soluzione ritengo analizzando le righe presenti nella variabile stringa restituita da
Shell, rintracciando uno o due di elementi che identifichino il tipo di file;
- nel mio caso potrebbe farsi un'analisi esadecimale (o anche solo
testuale, laddove utile) dell'
header (che distingue il tipo di file), oppure di altro segmento del file. Riguardo all'
header, ad esempio, per il Midi (...deformazione "professionale"
) è: 4D 58 68 64 (testualmente è:
MThd). Insomma si potrebbe fare una cosa come il seguente esempio:
In una cartella poniamo un
vero file Midi e vari file di altro tipo, ai quali cambiamo
l'estensione in .
mid. In questo modo
tutti i file, presenti nella cartella, avranno l'estensione
.mid ; ma... quale è il
vero file Midi ?
Allora... risolvo così:
Public Sub Button1_Click()
Dim $F, ogniFile As String
For Each ogniFile In Dir("/percorso_del_file/", "*.mid")
' vedo in console il nome di ciascun file .mid esistente nella cartella:
Print ogniFile
' quindi me lo carico....
$f = File.Load("/percorso_del_file/" & ogniFile)
'...e verifico che i primi 4 byte del file caricato corrispondano ai caratteri: MThd
' ossia all'inizio dell'Header Chunk che tipicizza il file Midi standard:
If Left($f, 4) = "MThd" Then
Print "Il file Midi VERO è: "; ogniFile
Endif
Next
End
...ed infatti funziona.
...che ne pensi ?