Conoscere il mime-type di un file mediante le sole risorse di Gambas

Da Gambas-it.org - Wikipedia.

Per conoscere il "mime-type" di un determinato file con le sole risorse native di Gambas, si potrà cercare la corrispondenza fra l'estensione di questo file con il mime-type riportata nell'ampia lista contenuta rispettivamente nei file di sistema "/usr/share/mime/globs" e "/etc/mime.types".

Potremo adottare il seguente codice:

Public Sub Main()
 
 Dim percorsofile, ris As String
   
' Specifica il file di cui cercare il corrispondente "mime-type":
  percorsofile = "/percorso/del/file"
  
  ris = ControllaGlobs(percorsofile)
  If IsNull(ris) Then
    ris = ControllaEtc(percorsofile)
  Endif
  
  If IsNull(ris) Then ris = "L'estensione del file non è presente nel database dei 'mime-type' !"
    
  Print ris
  
End


Private Function ControllaGlobs(perc As String) As String
 
 Dim gl, est, rit As String
 Dim ss As String[]
 Dim c As Short
 
' Dapprima verifica il mime-type nel file "/usr/share/mime/globs":
  gl = File.Load("/usr/share/mime/globs")
  
  est = ":*." & LCase(File.Ext(perc))
  
' Verifica se l'estensione del file corrente sia comunque presente nel file "/usr/share/mime/globs":
  If InStr(gl, est) Then
' Individua ogni riga componente il contenuto testuale del file "/usr/share/mime/globs":
    ss = Split(gl, "\n")
    For c = 0 To ss.Max
' Verifica quale riga del file "globs" termina con i caratteri della stringa contenuta nella variabile "est":
      If ss[c] Ends est Then
' Estrapola la prima parte della riga, ossia quella relativa al "mime-type" correlato all'estensione:
        rit = Scan(ss[c], "*:*")[0]
        Break
      Endif
    Next
  Endif
  
  Return rit
  
End


Private Function ControllaEtc(perc As String) As String
 
 Dim et, est, rit As String
 Dim ss As String[]
 Dim c As Short
 
' Quindi verifica il mime-type nel file "/etc/mime.types":
  et = File.Load("/etc/mime.types")
  et = Replace(et, Chr(&09), Chr(&20))
  
  est = LCase(File.Ext(perc))
  
' Verifica se l'estensione del file corrente sia comunque presente nel file "/etc/mime.types":
  If InStr(et, est) Then
' Individua ogni riga componente il contenuto testuale del file "/etc/mime.types":
    ss = Split(et, "\n")
    For c = 0 To ss.Max
' Verifica quale riga del file "mime.types" possiede i caratteri della stringa, contenuta nella variabile "est", anticipati da almeno uno spazio:
      If ss[c] Like "* " & est & "*" Then
' Estrapola la prima parte della riga, ossia quella relativa al "mime-type" correlato all'estensione:
        rit = Scan(ss[c], "* *")[0]
        Break
      Endif
    Next
  Endif
 
  Return rit
  
End