Differenze tra le versioni di "Conoscere la dimensione di un file"
Riga 2: | Riga 2: | ||
− | ==Uso della funzione | + | ==Uso della funzione "Lof()"== |
− | La funzone | + | La funzone "Lof()" restituisce proprio la lunghezza in byte di un file: |
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
Riga 17: | Riga 17: | ||
− | ==Uso della | + | ==Uso della Proprietà ".Size" della Classe ''Stat''== |
La Classe ''Stat'' restituisce una serie di informazioni relative ai file. | La Classe ''Stat'' restituisce una serie di informazioni relative ai file. | ||
Un esempio può essere il seguente: | Un esempio può essere il seguente: | ||
− | '''Public''' Sub | + | '''Public''' Sub Main() |
Dim s As String | Dim s As String | ||
Riga 32: | Riga 32: | ||
− | ==Uso della funzione | + | ==Uso della funzione "Len()"== |
− | Useremo la funzione | + | Useremo la funzione "Len()" per conoscere la lunghezza della stringa di dati restituita dalla funzione ''.Load'' della Classe ''File'': |
− | '''Public''' Sub | + | '''Public''' Sub Main() |
Dim s As String | Dim s As String | ||
Riga 66: | Riga 66: | ||
− | ==Uso della | + | ==Uso della Proprietà ".Count" di un vettore== |
− | Potremo usare anche la | + | 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() | ||
Riga 86: | Riga 86: | ||
'''End''' | '''End''' | ||
− | o | + | o più velocemente usando il Metodo "Read()" della variabile vettoriale di tipo Byte[]: |
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
Riga 150: | Riga 150: | ||
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 | + | E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "''libgio-2.0.so.0.6400.6'' ". |
Mostriamo un semplice esempio pratico: | Mostriamo un semplice esempio pratico: |
Versione delle 18:48, 5 set 2022
Per conoscere la dimensione di un file, si potranno adottare almeno cinque modalità.
Indice
- 1 Uso della funzione "Lof()"
- 2 Uso della Proprietà ".Size" della Classe Stat
- 3 Uso della funzione "Len()"
- 4 Uso della funzione Seek
- 5 Uso della Proprietà ".Count" di un vettore
- 6 Uso della funzione esterna "stat()" di C
- 7 Uso di alcune funzioni della libreria stdio.h di C
- 8 Uso di alcune funzioni esterne del API di Libgio-2.0
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 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 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 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.Add(b) Wend Print "La dimensione del file è: "; bb.Count; " byte" fl.Close 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 "/percorso/del/file" With bb = New Byte[Lof(fl)] .Read(fl) End With Print "La dimensione del file è: "; bb.Count; " byte" fl.Close End
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.6400.6 ".
Mostriamo un semplice esempio pratico:
Library "libgio-2.0:0.6400.6" 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