Differenze tra le versioni di "Conoscere la dimensione di un file"
(16 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Per conoscere la dimensione di un file, si potranno adottare | + | 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 | + | |
− | + | ==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("<FONT color=darkgreen>''/percorso/del/file''</font>") | |
− | |||
− | |||
− | |||
− | |||
− | + | Print "La dimensione del file è: "; <FONT color=#B22222>Len(s)</font>; " byte" | |
− | + | End | |
− | ==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 Main() | |
Dim s As String | Dim s As String | ||
− | + | s = Stat("<FONT color=darkgreen>''/percorso/del/file''</font>")<FONT color=#B22222>.Size</font> | |
− | + | Print "La dimensione del file è: "; s; " byte" | |
− | + | End | |
− | ==Uso | + | ==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 | Dim s As String | ||
− | + | s = File.Load("<FONT color=darkgreen>''/percorso/del/file''</font>") | |
+ | |||
+ | 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 | ||
==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() | |
Dim fl As File | Dim fl As File | ||
Dim i As Integer | Dim i As Integer | ||
− | + | fl = Open "<FONT color=darkgreen>''/percorso/del/file''</font>" For Read | |
− | + | While Not Eof(fl) | |
− | + | inc i | |
− | + | Seek #fl, i | |
− | + | Wend | |
− | + | Print "La dimensione del file è: "; i; " byte" | |
− | + | fl.Close | |
− | + | End | |
− | ==Uso della | + | ==Uso della Proprietà ".Count" di un vettore== |
− | Potremo usare anche | + | 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 fl As File | ||
Riga 74: | Riga 115: | ||
Dim b As Byte | Dim b As Byte | ||
− | + | fl = Open "<FONT color=darkgreen>''/percorso/del/file''</font>" 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: [[Stat_()|__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 | ||
+ | |||
+ | <FONT Color=gray>' ''FILE *fopen(const char *path, const char *mode)''</font> | ||
+ | Private Extern fopen(path As String, mode As String) As Pointer | ||
+ | |||
+ | <FONT Color=gray>' ''int fseek(FILE *stream, long offset, int whence)''</font> | ||
+ | Private Extern fseek(fs As Pointer, offset As Long, whence As Integer) As Integer | ||
+ | |||
+ | <FONT Color=gray>' ''long ftell(FILE *stream)''</font> | ||
+ | Private Extern ftell(fs As Pointer) As Long | ||
+ | |||
+ | <FONT Color=gray>' ''int fclose(FILE *stream)''</font> | ||
+ | Private Extern fclose(fs As Pointer) As Integer | ||
+ | |||
+ | |||
+ | Public Sub Main() | ||
+ | |||
+ | Dim fl As Pointer | ||
+ | Dim l As Long | ||
+ | |||
+ | fl = fopen("<FONT color=darkgreen>''/percorso/del/file''</font>", "rb") | ||
+ | If fl == 0 then Error.raise("Errore !") | ||
+ | |||
+ | <FONT Color=gray>' ''Determina la dimensione del file:''</font> | ||
+ | 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 | ||
+ | |||
+ | <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=darkgreen>''/percorso/del/file''</font>") | ||
+ | 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" | ||
+ | |||
+ | <FONT Color=gray>' ''Libera la memoria utilizzata con la libreria Libgio-2.0:''</font> | ||
+ | g_object_unref(gfi) | ||
+ | g_object_unref(gf) | ||
+ | |||
+ | End |
Versione attuale delle 14:01, 23 giu 2024
Per conoscere la dimensione di un file, si potranno adottare diverse modalità.
Indice
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