Differenze tra le versioni di "Conoscere la dimensione di un file"
Riga 144: | Riga 144: | ||
fclose(fl) | 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 dinamica condivisa: "''libgio-2.0''" | ||
+ | |||
+ | |||
+ | Mostriamo un semplice esempio pratico: | ||
+ | Library "libgio-2.0" | ||
+ | |||
+ | Private Enum G_FILE_QUERY_INFO_NONE = 0, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS | ||
+ | |||
+ | <FONT Color=gray>' ''GFile * g_file_new_for_path (const char *path)'' | ||
+ | ' ''Constructs a GFile for a given path.''</font> | ||
+ | Private Extern g_file_new_for_path(path As String) As Pointer | ||
+ | |||
+ | <FONT Color=gray>' ''GFileInfo * g_file_query_info (GFile *file, const char *attributes, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error)'' | ||
+ | ' ''Gets the requested information about specified file.''</font> | ||
+ | Private Extern g_file_query_info(gfile As Pointer, attributes As String, flags As Integer, cancellable As Pointer, gerror As Pointer) As Pointer | ||
+ | |||
+ | <FONT Color=gray>' ''goffset g_file_info_get_size (GFileInfo *info)'' | ||
+ | ' ''Gets the file's size.''</font> | ||
+ | Private Extern g_file_info_get_size(info As Pointer) As Long | ||
+ | |||
+ | <FONT Color=gray>' ''void g_object_unref (gpointer object)'' | ||
+ | ' ''Decreases the reference count of object.''</font> | ||
+ | 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("<FONT Color=gray>''/percorso/del/file''</font>") | ||
+ | |||
+ | gfi = g_file_query_info(gf, "standard::size", G_FILE_QUERY_INFO_NONE, 0, 0) | ||
+ | |||
+ | l = g_file_info_get_size(gfi) | ||
+ | Print l; " byte" | ||
+ | |||
+ | <FONT Color=gray>' ''Libera la memoria utilizzata con la libreria Libgio-2.0:''</font> | ||
+ | g_object_unref(gfi) | ||
+ | g_object_unref(gf) | ||
+ | |||
'''End''' | '''End''' |
Versione delle 17:12, 21 gen 2018
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 Button1_Click() 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 Button1_Click() 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 anche così 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.
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") ' 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 dinamica condivisa: "libgio-2.0"
Mostriamo un semplice esempio pratico:
Library "libgio-2.0" 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") gfi = g_file_query_info(gf, "standard::size", G_FILE_QUERY_INFO_NONE, 0, 0) 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