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

Da Gambas-it.org - Wikipedia.
Versione del 22 gen 2018 alle 17:38 di Vuott (Discussione | contributi) (Creata pagina con "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 libre...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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 dinamica condivisa: "libgio-2.0.so'"


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

Library "libgio-2.0"

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