Conoscere i permessi di un file mediante le funzioni esterne del API di libgio-2.0

Da Gambas-it.org - Wikipedia.

Con alcune funzioni esterne del API di libgio-2.0 è possibile conoscere i permessi di un file.

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

Mostriamo un esempio, nel quale si verificherà se un dato file può essere letto e può essere scritto.

Library "libgio-2.0:0.7200.4"

Private Enum G_FILE_QUERY_INFO_NONE = 0, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS
Private Const G_FILE_ATTRIBUTE_ACCESS_CAN_READ As String = "access::can-read"
Private Const G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE As String = "access::can-write"
 
' GFile * g_file_new_for_path (const char *path)
' Constructs a GFile for a given path.
Private Extern g_file_new_for_path(path As String) As Pointer

' GFileInfo * g_file_query_info (GFile *file, const char *attributes, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error)
' Gets the requested information about specified file.
Private Extern g_file_query_info(gfile As Pointer, attributes As String, flags As Integer, cancellable As Pointer, gerror As Pointer) As Pointer

' gboolean g_file_info_get_attribute_boolean (GFileInfo *info, const char *attribute)
' Gets the value of a boolean attribute. If the attribute does not contain a boolean value, FALSE will be returned.
Private Extern g_file_info_get_attribute_boolean(info As Pointer, attribute As String) As Boolean

' 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, gif As Pointer
 Dim bo As Boolean
  
 gf = g_file_new_for_path("/percorso/del/file")
 If gf == 0 Then Error.Raise("ERRORE !")
  
 gif = g_file_query_info(gf, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, G_FILE_QUERY_INFO_NONE, 0, 0)
 If gif == 0 Then Error.Raise("ERRORE !")
  
 bo = g_file_info_get_attribute_boolean(gif, G_FILE_ATTRIBUTE_ACCESS_CAN_READ)
 Print bo
  
 gif = g_file_query_info(gf, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, G_FILE_QUERY_INFO_NONE, 0, 0)
 If gif == 0 Then Error.Raise("ERRORE !")
  
 bo = g_file_info_get_attribute_boolean(gif, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE)
 Print bo
  
' Libera la memoria precedentemente occupata da Libgio:
 g_object_unref(gif)
 g_object_unref(gf)   
  
End


Riferimenti