Differenze tra le versioni di "Conoscere il tipo di file mediante le funzioni esterne del API di libgio"

Da Gambas-it.org - Wikipedia.
Riga 39: Riga 39:
 
   
 
   
 
   Dim gf As Pointer
 
   Dim gf As Pointer
   Dim tipo As Integer
+
   Dim tp As Integer
 +
  Dim tipo as String[] = ["G_FILE_TYPE_UNKNOWN", "G_FILE_TYPE_REGULAR", "G_FILE_TYPE_DIRECTORY", "G_FILE_TYPE_SYMBOLIC_LINK",
 +
                          "G_FILE_TYPE_SPECIAL", "G_FILE_TYPE_SHORTCUT", "G_FILE_TYPE_MOUNTABLE"]
 
   
 
   
   gf = g_file_new_for_path("''/percorso/del/file''")
+
   gf = g_file_new_for_path("<FONT Color=gray>''/percorso/del/file''</font>")
   If IsNull(gf) Then Error.Raise("Impossibile creare un oggetto GFile con il percorso del file impostato !")
+
   If gf = 0 Then Error.Raise("Impossibile creare un oggetto GFile con il percorso del file impostato !")
 
    
 
    
   tipo = g_file_query_file_type(gf, G_FILE_QUERY_INFO_NONE, 0)
+
   tp = g_file_query_file_type(gf, G_FILE_QUERY_INFO_NONE, 0)
 
    
 
    
   Print tipo
+
   Print tipo[tp]
 
    
 
    
 
   g_object_unref(gf)
 
   g_object_unref(gf)
 
   
 
   
 +
'''End'''
 +
 +
 +
Si potrà anche usare la funzione esterna ''g_file_test( )'', per verificare se il file corrisponde a un tipo previsto dall'enumerazione ''[https://developer.gnome.org/glib/stable/glib-File-Utilities.html#GFileTest GFileTest]'':
 +
Library "libgio-2.0"
 +
 +
Private Enum G_FILE_TEST_IS_REGULAR = 1, G_FILE_TEST_IS_SYMLINK, G_FILE_TEST_IS_DIR, G_FILE_TEST_IS_EXECUTABLE, G_FILE_TEST_EXISTS
 +
 +
<FONT Color=gray>' ''gboolean g_file_test (const gchar *filename, GFileTest test)''
 +
' ''Returns TRUE if any of the tests in the bitfield test are TRUE.''</font>
 +
Private Extern g_file_test(filename As String, test As Integer) As Boolean
 +
 +
 +
'''Public''' Sub Main()
 +
 
 +
  Dim bo As Boolean
 +
 
 +
  bo = g_file_test("<FONT Color=gray>''/percorso/del/file''</font>", G_FILE_TEST_EXISTS)
 +
  Print bo
 +
 
 
  '''End'''
 
  '''End'''

Versione delle 20:55, 17 mar 2018

La libreria Libgio fornisce un'astrazione del file system che permette alle applicazioni di accedere ai file locali e remoti.

E' possibile con alcune funzioni della libreria Libgio sapere a quale tipo un file appartiene. La tipologia è indicata nel file /usr/include/glib-2.0/gio/gioenums.h, ed è così specificata:

* GFileType:
* @G_FILE_TYPE_UNKNOWN: File's type is unknown.
* @G_FILE_TYPE_REGULAR: File handle represents a regular file.
* @G_FILE_TYPE_DIRECTORY: File handle represents a directory.
* @G_FILE_TYPE_SYMBOLIC_LINK: File handle represents a symbolic link
*    (Unix systems).
* @G_FILE_TYPE_SPECIAL: File is a "special" file, such as a socket, fifo,
*    block device, or character device.
* @G_FILE_TYPE_SHORTCUT: File is a shortcut (Windows systems).
* @G_FILE_TYPE_MOUNTABLE: File is a mountable location.

E' necessario avere installata nel sistema e richiamare in Gambas la libreria dinamica condivisa: "libgio-2.0.so"


Mostriamo di seguito un semplice esempio pratico:

Library "libgio-2.0"

Private Enum G_FILE_QUERY_INFO_NONE = 0, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS
Private Enum G_FILE_TYPE_UNKNOWN = 0, G_FILE_TYPE_REGULAR, G_FILE_TYPE_DIRECTORY, G_FILE_TYPE_SYMBOLIC_LINK,
             G_FILE_TYPE_SPECIAL, G_FILE_TYPE_SHORTCUT, G_FILE_TYPE_MOUNTABLE

' GFile * g_file_new_for_path (const char *path)
' Constructs a GFile for a given path. This operation never fails.
Private Extern g_file_new_for_path(path As String) As Pointer

' GFileType   g_file_query_file_type (GFile *file, GFileQueryInfoFlags flags, GCancellable *cancellable)
' Inspects the GFileType of a file.
Private Extern g_file_query_file_type(gfile As Pointer, flags As Integer, cancellable As Pointer) As Integer

' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)


Public Sub Main()

 Dim gf As Pointer
 Dim tp As Integer
 Dim tipo as String[] = ["G_FILE_TYPE_UNKNOWN", "G_FILE_TYPE_REGULAR", "G_FILE_TYPE_DIRECTORY", "G_FILE_TYPE_SYMBOLIC_LINK",
                         "G_FILE_TYPE_SPECIAL", "G_FILE_TYPE_SHORTCUT", "G_FILE_TYPE_MOUNTABLE"]

  gf = g_file_new_for_path("/percorso/del/file")
  If gf = 0 Then Error.Raise("Impossibile creare un oggetto GFile con il percorso del file impostato !")
  
  tp = g_file_query_file_type(gf, G_FILE_QUERY_INFO_NONE, 0)
  
  Print tipo[tp]
  
  g_object_unref(gf)

End


Si potrà anche usare la funzione esterna g_file_test( ), per verificare se il file corrisponde a un tipo previsto dall'enumerazione GFileTest:

Library "libgio-2.0"

Private Enum G_FILE_TEST_IS_REGULAR = 1, G_FILE_TEST_IS_SYMLINK, G_FILE_TEST_IS_DIR, G_FILE_TEST_IS_EXECUTABLE, G_FILE_TEST_EXISTS

' gboolean g_file_test (const gchar *filename, GFileTest test)
' Returns TRUE if any of the tests in the bitfield test are TRUE.
Private Extern g_file_test(filename As String, test As Integer) As Boolean


Public Sub Main()
 
 Dim bo As Boolean
  
  bo = g_file_test("/percorso/del/file", G_FILE_TEST_EXISTS)
  Print bo
  
End