Differenze tra le versioni di "Verificare l'esistenza di una directory"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Per verificare se una ''Directory'' esiste, si possono adottare almeno due modalità. ==Uso delle risorse di Gambas== Si può utilizzare la funzione ''Exist( )'', la quale r...")
 
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per verificare se una ''Directory'' esiste, si possono adottare almeno due modalità.
+
Per verificare se una ''Directory'' esiste, si possono adottare alcune modalità.
 
 
  
 
==Uso delle risorse di Gambas==
 
==Uso delle risorse di Gambas==
Si può utilizzare la funzione ''Exist( )'', la quale ritorna ''vero'' se il file o la cartella, indicati nel suo parametro, sono esistenti.
+
Si può utilizzare la funzione "Exist()", la quale ritorna ''vero'' se il file o la cartella, indicati nel suo parametro, sono esistenti.
  
 
Esempio pratico:
 
Esempio pratico:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
  Dim ris, cartella As String
+
  Dim ris, cartella As String
 
      
 
      
 
   cartella = "/tmp"
 
   cartella = "/tmp"
 
    
 
    
   If Exist(cartella) = False Then ris = " non"
+
   If Not Exist(cartella) Then ris = " non"
 
    
 
    
 
   Print "La Directory "; cartella; ris; " esiste !"
 
   Print "La Directory "; cartella; ris; " esiste !"
 
    
 
    
  '''End'''
+
  End
 +
Si può utilizzare anche la funzione "IsDir()".
 +
<BR>Se il file con il nome del percorso non esite, o se il file non è una directory, allora la funzione "IsDir()" restituisce ''Falso''.
 +
Public Sub Main()
 +
 
 +
  Dim ris, cartella As String
 +
   
 +
  cartella = "/tmp"
 +
 
 +
  If Not IsDir(cartella) Then ris = " non"
 +
 
 +
  Print "Il percorso "; cartella; ris; " è una Directory !"
 +
 
 +
End
  
  
==Uso della funzione esterna ''opendir( )''==
+
==Uso della funzione esterna "opendir()"==
Un'altra modalità prevede l'uso della funzione esterna "''opendir( )''", dichiarata nel file header "''/usr/include/dirent.h''". Tale funzione esterna ....
+
Un'altra modalità prevede l'uso della funzione esterna "[http://man7.org/linux/man-pages/man3/opendir.3.html opendir()]", dichiarata nel file header "''/usr/include/dirent.h'' ".
 +
<BR>Tale funzione esterna restituisce un ''Puntatore'' valido, se non ha riscontrato errori nel tentativo di accesso alla ''Dyrectory'' impostata, altrimenti ritorna ''NULL'', che in Gambas corrisponde, come valore predefinito di una variabile di tipo ''Puntatore'', allo zero (0).
  
 +
Library "libc:6"
 +
 +
<FONT Color=gray>' ''DIR *opendir (const char *__name)''
 +
' ''Open a directory stream on NAME.''</font>
 +
Private Extern opendir(name As String) As Pointer
 +
 +
 +
Public Sub Main()
 +
 
 +
  Dim cartella As String
 +
  Dim drc As Pointer
 +
 +
  cartella = "<FONT Color=darkgreen>''/cartella/da/verificare''</font>"
 +
 
 +
  drc = opendir(cartella)
 +
  If drc == 0 Then Error.Raise("Directory inesistente !")
 +
 
 +
End
  
  
Library "libc:6"
+
==Uso della funzione esterna "stat()"==
 +
Un'altra modalità prevede l'uso della funzione esterna "stat()", dichiarata nel file header "''/usr/include/x86_64-linux-gnu/sys/stat.h'' ".
  
' DIR *opendir (const char *__name)
+
Per utilizzare la funzione esterna "stat()", bisognerà attenersi in Gambas strettamente a quanto già precisato nella pagina di questa Wiki: [[Stat_()|stat ()]].
' Open a directory stream on NAME.
 
Private Extern opendir(name As String) As Pointer
 
  
 
+
Mostriamo un esempio pratico per verificare l'esistenza di una Directory:
Public Sub Main()
+
Library "libc:6"
 
+
  Dim drc As Pointer
+
Public Struct stat_
  Dim ss As String[]
+
  st_dev As Long
  Dim s As String
+
  st_ino As Long
Dim ris, cartella As String
+
  st_nlink As Long
    cartella = "/tmpe"
+
  st_mode As Integer
 +
  st_uid As Integer
 +
  st_gid As Integer
 +
  __pad0 As Integer
 +
  st_rdev As Long
 +
  st_size As Long
 +
  st_blksize As Long
 +
  st_blocks As Long
 +
  st_atime As Long
 +
  st_atimensec As Long
 +
  st_mtime As Long
 +
  st_mtimensec As Long
 +
  st_ctime As Long
 +
  st_ctimensec As Long
 +
  __glibc_reserved[3] As Long
 +
End Struct
 +
 +
Private Const _STAT_VER_LINUX as Integer = 1
 +
Private Const S_IFDIR As Integer = 16384
 +
 +
<FONT Color=gray>' ''int __xstat (_STAT_VER, __path, __statbuf)''
 +
' ''Get file attributes for FILE and put them in BUF.''</font>
 +
Private Extern <FONT color=#B22222>__xstat</font>(_STAT_VER As Integer, __path As String, __statbuf As stat_) As Integer
 +
 
 +
 +
Public Sub Main()
 +
 
 +
  Dim i As Integer
 +
  Dim st As New stat_
 +
  Dim percorso, s As String
 +
 +
  percorso = "<FONT Color=darkgreen>''/cartella/da/verificare''</font>"
 +
 
 +
  i = <FONT color=#B22222>__xstat</font>(_STAT_VER_LINUX, percorso, st)
 +
  If i < 0 Then Error.Raise("Percorso inesistente !")
 
    
 
    
    drc = opendir("mydir")
+
  If st.st_mode And S_IFDIR Then Print percorso; " è una Directory."
    If drc == 0 Then Error.Raise("Directory inesistente !")
+
 
 
+
End
End
 

Versione attuale delle 16:49, 24 giu 2024

Per verificare se una Directory esiste, si possono adottare alcune modalità.

Uso delle risorse di Gambas

Si può utilizzare la funzione "Exist()", la quale ritorna vero se il file o la cartella, indicati nel suo parametro, sono esistenti.

Esempio pratico:

Public Sub Main()
 
  Dim ris, cartella As String
    
  cartella = "/tmp"
  
  If Not Exist(cartella) Then ris = " non"
  
  Print "La Directory "; cartella; ris; " esiste !"
  
End

Si può utilizzare anche la funzione "IsDir()".
Se il file con il nome del percorso non esite, o se il file non è una directory, allora la funzione "IsDir()" restituisce Falso.

Public Sub Main()
 
  Dim ris, cartella As String
    
  cartella = "/tmp"
  
  If Not IsDir(cartella) Then ris = " non"
  
  Print "Il percorso "; cartella; ris; " è una Directory !"
  
End


Uso della funzione esterna "opendir()"

Un'altra modalità prevede l'uso della funzione esterna "opendir()", dichiarata nel file header "/usr/include/dirent.h ".
Tale funzione esterna restituisce un Puntatore valido, se non ha riscontrato errori nel tentativo di accesso alla Dyrectory impostata, altrimenti ritorna NULL, che in Gambas corrisponde, come valore predefinito di una variabile di tipo Puntatore, allo zero (0).

Library "libc:6"

' DIR *opendir (const char *__name)
' Open a directory stream on NAME.
Private Extern opendir(name As String) As Pointer


Public Sub Main()
 
  Dim cartella As String
  Dim drc As Pointer

  cartella = "/cartella/da/verificare"
  
  drc = opendir(cartella)
  If drc == 0 Then Error.Raise("Directory inesistente !")
  
End


Uso della funzione esterna "stat()"

Un'altra modalità prevede l'uso della funzione esterna "stat()", dichiarata nel file header "/usr/include/x86_64-linux-gnu/sys/stat.h ".

Per utilizzare la funzione esterna "stat()", bisognerà attenersi in Gambas strettamente a quanto già precisato nella pagina di questa Wiki: stat ().

Mostriamo un esempio pratico per verificare l'esistenza di una Directory:

Library "libc:6"

Public Struct stat_
  st_dev As Long
  st_ino As Long
  st_nlink As Long
  st_mode As Integer
  st_uid As Integer
  st_gid As Integer
  __pad0 As Integer
  st_rdev As Long
  st_size As Long
  st_blksize As Long
  st_blocks As Long
  st_atime As Long
  st_atimensec As Long
  st_mtime As Long
  st_mtimensec As Long 
  st_ctime As Long
  st_ctimensec As Long
  __glibc_reserved[3] As Long
End Struct

Private Const _STAT_VER_LINUX as Integer = 1
Private Const S_IFDIR As Integer = 16384

' int __xstat (_STAT_VER, __path, __statbuf)
' Get file attributes for FILE and put them in BUF.
Private Extern __xstat(_STAT_VER As Integer, __path As String, __statbuf As stat_) As Integer
 

Public Sub Main()
 
  Dim i As Integer
  Dim st As New stat_
  Dim percorso, s As String

  percorso = "/cartella/da/verificare"
  
  i = __xstat(_STAT_VER_LINUX, percorso, st)
  If i < 0 Then Error.Raise("Percorso inesistente !")
 
  If st.st_mode And S_IFDIR Then Print percorso; " è una Directory."
  
End