Conoscere la dimensione di un file: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per conoscere la dimensione di un file, si potranno adottare almeno cinque modalità.
Per conoscere la dimensione di un file, si potranno adottare diverse modalità.


=Uso delle risorse della Classe Statica ''File''=
Se si usa il Metodo ".Load()" della Classe statica ''File'', per caricare un file, allora si potrà agevolmente conoscere la dimensione del file caricato mediante la Proprietà statica ".Len" della variabile stringa restituita:
Public Sub Main()
  Dim s As String
  s = File.Load("<FONT color=darkgreen>''/percorso/del/file''</font>")
  Print s<FONT color=#B22222>.Len</font>
End


==Uso della funzione "Lof()"==
 
La funzone "Lof()" restituisce proprio la lunghezza in byte di un file:
==Uso della funzione "Len()"==
'''Public''' Sub Main()
Useremo la funzione "Len()" per conoscere la lunghezza della stringa di dati restituita dalla funzione ''.Load'' della Classe ''File'':
Public Sub Main()
  Dim s As String
   
   
   Dim fl As File
   s = File.Load("<FONT color=darkgreen>''/percorso/del/file''</font>")
 
  fl = Open "<FONT color=gray>''/percorso/del/file''</font>" For Read
 
  Print "La dimensione del file è: "; <FONT color=#B22222>Lof(fl)</font>; " byte"
   
   
   fl.Close
   Print "La dimensione del file è: "; <FONT color=#B22222>Len(s)</font>; " byte"
   
   
  '''End'''
  End




Riga 21: Riga 31:


Un esempio può essere il seguente:
Un esempio può essere il seguente:
  '''Public''' Sub Main()
  Public Sub Main()
   
   
   Dim s As String
   Dim s As String
   
   
   s = Stat("<FONT color=gray>''/percorso/del/file''</font>")<FONT color=#B22222>.Size</font>
   s = Stat("<FONT color=darkgreen>''/percorso/del/file''</font>")<FONT color=#B22222>.Size</font>
   
   
   Print "La dimensione del file è: "; s; " byte"
   Print "La dimensione del file è: "; s; " byte"
   
   
  '''End'''
  End




==Uso della funzione "Len()"==
==Uso del Metodo ".Len()" della Classe "String"==
Useremo la funzione "Len()" per conoscere la lunghezza della stringa di dati restituita dalla funzione ''.Load'' della Classe ''File'':
Si utilizzerà il Metodo ".Len()" della Classe "String" per ottenere la lunghezza in caratteri di una stringa UTF-8:
'''Public''' Sub Main()
  Public Sub Main()
   
   
   Dim s As String
   Dim s As String
   
   
   s = File.Load("<FONT color=gray>''/percorso/del/file''</font>")
   s = File.Load("<FONT color=darkgreen>''/percorso/del/file''</font>")
   
   
   Print "La dimensione del file è: "; <FONT color=#B22222>Len(s)</font>; " byte"
  Print <FONT color=red>String.Len</font>(s)
End
 
 
==Uso della Proprietà ".Count" di un vettore ==
Potremo anche usare anche la Proprietà ".Count" di un vettore di tipo Byte[]":
Public Sub Main()
  Dim bb as New Byte[]
  Dim b As Byte
 
  bb = Byte[].FromString(File.Load("<FONT color=darkgreen>''/percorso/del/file''</font>"))
  Print "La dimensione del file è: "; bb.Count; " byte"
End
 
 
=Uso della Classe creabile ''File''=
 
==Uso della funzione "Lof()"==
La funzone "Lof()" restituisce proprio la lunghezza in byte di un file:
Public Sub Main()
  Dim fl As File
 
  fl = Open "<FONT color=darkgreen>''/percorso/del/file''</font>" For Read
 
   Print "La dimensione del file è: "; <FONT color=darkgreen>Lof(fl)</font>; " byte"
  fl.Close
   
   
  '''End'''
  End




==Uso della funzione ''Seek''==
==Uso della funzione ''Seek''==
Potremo usare anche leggere la quantità di dati contenuti in un file con la funzione ''Seek'', come ad esempio:
Potremo usare anche leggere la quantità di dati contenuti in un file con la funzione ''Seek'', come ad esempio:
  '''Public''' Sub Main()
  Public Sub Main()
   
   
   Dim fl As File
   Dim fl As File
   Dim i As Integer
   Dim i As Integer
   
   
   fl = Open "<FONT color=gray>''/percorso/del/file''</font>" For Read
   fl = Open "<FONT color=darkgreen>''/percorso/del/file''</font>" For Read
   
   
   While Not Eof(fl)
   While Not Eof(fl)
Riga 63: Riga 104:
   fl.Close
   fl.Close
   
   
  '''End'''
  End




==Uso della Proprietà ".Count" di un vettore==
==Uso della Proprietà ".Count" di un vettore==
Potremo usare anche la Proprietà ".Count" di un vettore per conoscere - dopo l'intera lettura di un file - la dimensione del file medesimo, come ad esempio:
Potremo usare anche la Proprietà ".Count" di un vettore per conoscere - dopo l'intera lettura di un file - la dimensione del file medesimo, come ad esempio:
  '''Public''' Sub Main()
  Public Sub Main()
   
   
   Dim fl As File
   Dim fl As File
Riga 74: Riga 115:
   Dim b As Byte
   Dim b As Byte
    
    
   fl = Open "<FONT color=gray>''/percorso/del/file''</font>" For Read
   fl = Open "<FONT color=darkgreen>''/percorso/del/file''</font>" For Read
   
   
   While Not Eof(fl)
   While Not Eof(fl)
     Read #fl, b
     Read #fl, b
     bb.Add(b)
     bb.Push(b)
   Wend
   Wend
   
   
Riga 85: Riga 126:
   fl.Close
   fl.Close
   
   
  '''End'''
  End
o più velocemente usando il Metodo "Read()" della variabile vettoriale di tipo Byte[]:
 
'''Public''' Sub Main()
  Dim fl As File
  Dim bb as Byte[]
 
  fl = Open "<FONT color=gray>''/percorso/del/file''</font>"
  With bb = New Byte[Lof(fl)]
    .Read(fl)
  End With
  Print "La dimensione del file è: "; bb.Count; " byte"
  fl.Close
'''End'''


=Uso di funzioni esterne=
Si potranno utilizzare anche alcune risorse esterne a Gambas.


==Uso della funzione esterna "stat()" di C==
==Uso della funzione esterna "stat()" di C==
Riga 128: Riga 155:
   
   
   
   
  '''Public''' Sub Main()
  Public Sub Main()
   
   
   Dim fl As Pointer
   Dim fl As Pointer
   Dim l As Long
   Dim l As Long
   
   
   fl = fopen("<FONT color=gray>''/percorso/del/file''</font>", "rb")
   fl = fopen("<FONT color=darkgreen>''/percorso/del/file''</font>", "rb")
   If fl == 0 then Error.raise("Errore !")
   If fl == 0 then Error.raise("Errore !")
      
      
Riga 144: Riga 171:
   fclose(fl)
   fclose(fl)
   
   
  '''End'''
  End




Riga 150: Riga 177:
E' possibile utilizzare alcune funzioni esterne del API di Libgio-2.0, in particolare della funzione "g_file_info_get_size()".
E' possibile utilizzare alcune funzioni esterne del API di Libgio-2.0, in particolare della funzione "g_file_info_get_size()".


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


Mostriamo un semplice esempio pratico:
Mostriamo un semplice esempio pratico:
  Library "libgio-2.0:0.6400.6"
  Library "libgio-2.0:0.8000.2"
   
   
  Private Enum G_FILE_QUERY_INFO_NONE = 0, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS
  Private Enum G_FILE_QUERY_INFO_NONE = 0, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS
Riga 174: Riga 201:
   
   
   
   
  '''Public''' Sub Main()
  Public Sub Main()
    
    
   Dim gf, gfi As Pointer
   Dim gf, gfi As Pointer
   Dim l As Long
   Dim l As Long
    
    
   gf = g_file_new_for_path("<FONT Color=gray>''/percorso/del/file''</font>")
   gf = g_file_new_for_path("<FONT Color=darkgreen>''/percorso/del/file''</font>")
   If gf == 0 then Error.raise("Errore !")
   If gf == 0 then Error.raise("Errore !")
    
    
Riga 192: Riga 219:
   g_object_unref(gf)
   g_object_unref(gf)
    
    
  '''End'''
  End

Versione attuale delle 15:01, 23 giu 2024

Per conoscere la dimensione di un file, si potranno adottare diverse modalità.

Uso delle risorse della Classe Statica File

Se si usa il Metodo ".Load()" della Classe statica File, per caricare un file, allora si potrà agevolmente conoscere la dimensione del file caricato mediante la Proprietà statica ".Len" della variabile stringa restituita:

Public Sub Main()

 Dim s As String

 s = File.Load("/percorso/del/file")

 Print s.Len

End


Uso della funzione "Len()"

Useremo la funzione "Len()" per conoscere la lunghezza della stringa di dati restituita dalla funzione .Load della Classe File:

Public Sub Main()

 Dim s As String

 s = File.Load("/percorso/del/file")

 Print "La dimensione del file è: "; Len(s); " byte"

End


Uso della Proprietà ".Size" della Classe Stat

La Classe Stat restituisce una serie di informazioni relative ai file.

Un esempio può essere il seguente:

Public Sub Main()

 Dim s As String

 s = Stat("/percorso/del/file").Size

 Print "La dimensione del file è: "; s; " byte"

End


Uso del Metodo ".Len()" della Classe "String"

Si utilizzerà il Metodo ".Len()" della Classe "String" per ottenere la lunghezza in caratteri di una stringa UTF-8:

 Public Sub Main()

 Dim s As String

 s = File.Load("/percorso/del/file")

 Print String.Len(s)

End


Uso della Proprietà ".Count" di un vettore

Potremo anche usare anche la Proprietà ".Count" di un vettore di tipo Byte[]":

Public Sub Main()

 Dim bb as New Byte[]
 Dim b As Byte
 
 bb = Byte[].FromString(File.Load("/percorso/del/file"))

 Print "La dimensione del file è: "; bb.Count; " byte"

End


Uso della Classe creabile File

Uso della funzione "Lof()"

La funzone "Lof()" restituisce proprio la lunghezza in byte di un file:

Public Sub Main()

 Dim fl As File
 
 fl = Open "/percorso/del/file" For Read
 
 Print "La dimensione del file è: "; Lof(fl); " byte"

 fl.Close

End


Uso della funzione Seek

Potremo usare anche leggere la quantità di dati contenuti in un file con la funzione Seek, come ad esempio:

Public Sub Main()

 Dim fl As File
 Dim i As Integer

 fl = Open "/percorso/del/file" For Read

 While Not Eof(fl)
   inc i
   Seek #fl, i
 Wend
 
 Print "La dimensione del file è: "; i; " byte"

 fl.Close

End


Uso della Proprietà ".Count" di un vettore

Potremo usare anche la Proprietà ".Count" di un vettore per conoscere - dopo l'intera lettura di un file - la dimensione del file medesimo, come ad esempio:

Public Sub Main()

 Dim fl As File
 Dim bb as New Byte[]
 Dim b As Byte
 
 fl = Open "/percorso/del/file" For Read

 While Not Eof(fl)
   Read #fl, b
   bb.Push(b)
 Wend

 Print "La dimensione del file è: "; bb.Count; " byte"

 fl.Close

End


Uso di funzioni esterne

Si potranno utilizzare anche alcune risorse esterne a Gambas.

Uso della funzione esterna "stat()" di C

Si potrà, volendo, utilizzare anche la funzione esterna "stat()" di C con le modalità indicate in questa pagina della Wiki: __xstat().


Uso di alcune funzioni della libreria stdio.h di C

Si potranno, volendo, utilizzare anche alcune funzioni esterne della libreria stdio.h di C, come segue:

Library "libc:6"

Private Const SEEK_END As Integer = 2

' FILE *fopen(const char *path, const char *mode)
Private Extern fopen(path As String, mode As String) As Pointer

' int fseek(FILE *stream, long offset, int whence)
Private Extern fseek(fs As Pointer, offset As Long, whence As Integer) As Integer

' long ftell(FILE *stream)
Private Extern ftell(fs As Pointer) As Long

' int fclose(FILE *stream)
Private Extern fclose(fs As Pointer) As Integer


Public Sub Main()

 Dim fl As Pointer
 Dim l As Long

 fl = fopen("/percorso/del/file", "rb")
 If fl == 0 then Error.raise("Errore !")
   
' Determina la dimensione del file:
 fseek(fl, 0, SEEK_END)
 l = ftell(fl)
  
 Print "Numero di byte nel file: "; l
  
 fclose(fl)

End


Uso di alcune funzioni esterne del API di Libgio-2.0

E' possibile utilizzare alcune funzioni esterne del API di Libgio-2.0, in particolare della funzione "g_file_info_get_size()".

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

Mostriamo un semplice esempio pratico:

Library "libgio-2.0:0.8000.2"

Private Enum G_FILE_QUERY_INFO_NONE = 0, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS
 
' 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

' goffset g_file_info_get_size (GFileInfo *info)
' Gets the file's size.
Private Extern g_file_info_get_size(info As Pointer) As Long

' 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, gfi As Pointer
 Dim l As Long
  
 gf = g_file_new_for_path("/percorso/del/file")
 If gf == 0 then Error.raise("Errore !")
  
 gfi = g_file_query_info(gf, "standard::size", G_FILE_QUERY_INFO_NONE, 0, 0)
 If gfi == 0 then Error.raise("Errore !")
  
 l = g_file_info_get_size(gfi)
 Print l; " byte"
  
' Libera la memoria utilizzata con la libreria Libgio-2.0:
 g_object_unref(gfi)
 g_object_unref(gf)
  
End