Differenze tra le versioni di "Effettuare una copia di un file e verificarne la progressione"
Da Gambas-it.org - Wikipedia.
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
− | + | =Usando le sole risorse di Gambas= | |
Vediamo una modalità che fa uso delle sole risorse di Gambas. | Vediamo una modalità che fa uso delle sole risorse di Gambas. | ||
− | + | ===Con un'applicazione in ambiente grafico=== | |
− | + | Public Sub Button1_Click() | |
Dim flOr, flCp As File | Dim flOr, flCp As File | ||
Riga 14: | Riga 14: | ||
Dim l As Long | Dim l As Long | ||
− | origo = "<FONT Color= | + | origo = "<FONT Color=darkgreen>''/percorso/del/file/da/copiare''</font>" |
− | copia = "<FONT Color= | + | copia = "<FONT Color=darkgreen>''/percorso/della/copia/del/file''</font>" |
flOr = Open origo For Read | flOr = Open origo For Read | ||
Riga 39: | Riga 39: | ||
flOr.Close | flOr.Close | ||
− | + | End | |
− | + | ===Con un'applicazione ''a riga di comando''=== | |
− | + | Public Sub Main() <SUP>' [[[#Note|nota 1]]]</sup> | |
Dim flOr, flCp As File | Dim flOr, flCp As File | ||
Riga 51: | Riga 51: | ||
Dim l As Long | Dim l As Long | ||
− | origo = "<FONT Color= | + | origo = "<FONT Color=darkgreen>''/percorso/del/file/da/copiare''</font>" |
− | copia = "<FONT Color= | + | copia = "<FONT Color=darkgreen>''/percorso/della/copia/del/file''</font>" |
flOr = Open origo For Read | flOr = Open origo For Read | ||
Riga 76: | Riga 76: | ||
flOr.Close | flOr.Close | ||
− | + | End | |
− | + | =Usare le funzioni esterne del API di Libgio= | |
Con le risorse della libreria '''Libgio''' è possibile effettuare la copia di un file e verificarne mano mano la progressione della copiatura. | Con le risorse della libreria '''Libgio''' è possibile effettuare la copia di un file e verificarne mano mano la progressione della copiatura. | ||
− | E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "''libgio-2.0.so.0. | + | E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "''libgio-2.0.so.0.7200.4'' ". |
Mostriamo un semplice esempio, in cui mentre viene effettuata la copia di un file, ne viene anche mostrata la progressione in una ''ProgressBar'': | Mostriamo un semplice esempio, in cui mentre viene effettuata la copia di un file, ne viene anche mostrata la progressione in una ''ProgressBar'': | ||
− | Library "libgio-2.0:0. | + | Library "libgio-2.0:0.7200.4" |
Private Enum G_FILE_COPY_NONE = 0, G_FILE_COPY_OVERWRITE, G_FILE_COPY_BACKUP, G_FILE_COPY_NOFOLLOW_SYMLINKS, | Private Enum G_FILE_COPY_NONE = 0, G_FILE_COPY_OVERWRITE, G_FILE_COPY_BACKUP, G_FILE_COPY_NOFOLLOW_SYMLINKS, | ||
Riga 99: | Riga 99: | ||
− | + | Public Sub Form_Open() | |
ProgressBar1.Value = 0.0 | ProgressBar1.Value = 0.0 | ||
− | + | End | |
+ | |||
− | + | Public Sub Button1_Click() | |
Dim origo, finis As String | Dim origo, finis As String | ||
Dim ori, des, data As Pointer | Dim ori, des, data As Pointer | ||
− | origo = "<FONT Color= | + | origo = "<FONT Color=darkgreen>''/percorso/del/file/origine/da/copiare''</font>" |
− | + | finis = "<FONT Color=darkgreen>''/percorso/della/copia/del/file''</font>" | |
− | finis = "<FONT Color= | ||
ori = g_file_new_for_path(origo) | ori = g_file_new_for_path(origo) | ||
Riga 131: | Riga 131: | ||
Endif | Endif | ||
− | + | End | |
Riga 137: | Riga 137: | ||
=Riferimenti= | =Riferimenti= | ||
* https://docs.gtk.org/gio/iface.File.html | * https://docs.gtk.org/gio/iface.File.html | ||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] Vedasi anche questa pagina: [[Pseudo-ProgressBar in un'applicazione 'a riga di comando']] |
Versione attuale delle 08:45, 14 dic 2023
Mostriamo in questa pagina due possibili modalità per effettuare una copia di un file e verificarne la progressione in percentuale.
Indice
Usando le sole risorse di Gambas
Vediamo una modalità che fa uso delle sole risorse di Gambas.
Con un'applicazione in ambiente grafico
Public Sub Button1_Click() Dim flOr, flCp As File Dim origo, copia As String Dim bb As Byte[] Dim quantum, lo As Integer Dim l As Long origo = "/percorso/del/file/da/copiare" copia = "/percorso/della/copia/del/file" flOr = Open origo For Read flCp = Open copia For Create lo = Lof(flOr) quantum = lo \ 100 bb = New Byte[quantum + (lo Mod 100)] While Not Eof(flOr) If lo - Seek(flOr) < quantum Then quantum = lo - Seek(flOr) bb.Read(flOr, 0, quantum) bb.Write(flCp, 0, quantum) l += quantum ProgressBar1.Value = ((l * 100) \ lo) / 100 Wait 0.001 Wend flCp.Close flOr.Close End
Con un'applicazione a riga di comando
Public Sub Main() ' [nota 1] Dim flOr, flCp As File Dim origo, copia As String Dim bb As Byte[] Dim quantum, lo As Integer Dim l As Long origo = "/percorso/del/file/da/copiare" copia = "/percorso/della/copia/del/file" flOr = Open origo For Read flCp = Open copia For Create lo = Lof(flOr) quantum = lo \ 100 bb = New Byte[quantum + (lo Mod 100)] While Not Eof(flOr) If lo - Seek(flOr) < quantum Then quantum = lo - Seek(flOr) bb.Read(flOr, 0, quantum) bb.Write(flCp, 0, quantum) l += quantum Write "\r" & CStr((l * 100) \ lo) & "%" Flush Wend flCp.Close flOr.Close End
Usare le funzioni esterne del API di Libgio
Con le risorse della libreria Libgio è possibile effettuare la copia di un file e verificarne mano mano la progressione della copiatura.
E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libgio-2.0.so.0.7200.4 ".
Mostriamo un semplice esempio, in cui mentre viene effettuata la copia di un file, ne viene anche mostrata la progressione in una ProgressBar:
Library "libgio-2.0:0.7200.4" Private Enum G_FILE_COPY_NONE = 0, G_FILE_COPY_OVERWRITE, G_FILE_COPY_BACKUP, G_FILE_COPY_NOFOLLOW_SYMLINKS, G_FILE_COPY_ALL_METADATA, G_FILE_COPY_NO_FALLBACK_FOR_MOVE, G_FILE_COPY_TARGET_DEFAULT_PERMS ' 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 ' gboolean g_file_copy (GFile *source, GFile *destination, GFileCopyFlags flags, GCancellable *cancellable, GFileProgressCallback progress_callback, gpointer progress_callback_data, GError **error) ' Copies the file source to the location specified by destination. Private Extern g_file_copy(source As Pointer, destination As Pointer, flags As Integer, cancellable As Pointer, callback As Pointer, callback_data As Pointer, GError As Pointer) As Boolean Public Sub Form_Open() ProgressBar1.Value = 0.0 End Public Sub Button1_Click() Dim origo, finis As String Dim ori, des, data As Pointer origo = "/percorso/del/file/origine/da/copiare" finis = "/percorso/della/copia/del/file" ori = g_file_new_for_path(origo) des = g_file_new_for_path(finis) g_file_copy(ori, des, G_FILE_COPY_OVERWRITE, 0, Progress, data, 0) End Public Function Progress(cur_bytes As Long, total_bytes As Long, data As Pointer) Dim value As Float If cur_bytes > 0 Then value = CFloat(cur_bytes) / CFloat(total_bytes) ProgressBar1.Value = value Wait 0.001 Endif End
Riferimenti
Note
[1] Vedasi anche questa pagina: Pseudo-ProgressBar in un'applicazione 'a riga di comando'