Effettuare una copia di un file e verificarne la progressione
Da Gambas-it.org - Wikipedia.
Versione del 21 dic 2015 alle 18:06 di Vuott (Discussione | contributi) (Creata pagina con "Mostriamo in questa pagina due possibili modalità per effettuare una copia di un file e verificarne la progressione in percentuale. ==Usando le sole risorse di Gambas== Que...")
Mostriamo in questa pagina due possibili modalità per effettuare una copia di un file e verificarne la progressione in percentuale.
Usando le sole risorse di Gambas
Questa modalità fa uso delle sole risorse di Gambas:
Public Sub Main() 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 #File.Out, "\r" & CStr((l * 100) \ lo) & "%" 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 dinamica condivisa: libgio-2.0.so.0.4002.0
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.4002.0" 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