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 | + | 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 | + | 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 | + | 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