vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB5, VB630.10.02
Copy-Funktion per API mit Fortschrittsanzeige

Eine Datei-Kopierfunktion mit Fortschrittsanzeige! Wie's geht erfahren Sie hier.

Autor:   Eduard SudnikBewertung:     [ Jetzt bewerten ]Views:  49.447 
www.esu-soft.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Immer wieder wird nach einer Kopierfunktion gefragt, die den Fortschritt anzeigt und einfach zu integrieren ist. Über die API - Dokumentation bin ich zufällig auf die Funktion CopyFileEx gestossen. Diese Funktion bietet genau die gesuchte Funktion: Kopieren einer Datei und Möglichkeit den Kopierfortschritt beliebig anzuzeigen.

Hierzu wird ein Modul mit folgendem Code benötigt:

Option Explicit
 
' Benötigte API-Deklarationen und Konstanten
Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Public Const PROGRESS_QUIET = 3
Public Const PROGRESS_STOP = 2
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2
 
Public Declare Function CopyFileEx Lib "kernel32.dll" _
  Alias "CopyFileExA" ( _
  ByVal lpExistingFileName As String, _
  ByVal lpNewFileName As String, _
  ByVal lpProgressRoutine As Long, _
  lpData As Any, _
  ByRef pbCancel As Long, _
  ByVal dwCopyFlags As Long) As Long
 
Public bCancel As Long
 
' Verweis auf ein ProgressBar-Control
Public glbProgBar As ProgressBar

Die eigentlich Funktion:

' Datei kopieren mit Fortschrittsanzeige
Public Function Fortschrittsanzeige( _
  ByVal TotalFileSize As Currency, _
  ByVal TotalBytesTransferred As Currency, _
  ByVal StreamSize As Currency, _
  ByVal StreamBytesTransferred As Currency, _
  ByVal dwStreamNumber As Long, _
  ByVal dwCallbackReason As Long, _
  ByVal hSourceFile As Long, _
  ByVal hDestinationFile As Long, _
  ByVal lpData As Long) As Long
 
  If Not glbProgBar Is Nothing Then
    With glbProgBar
      .Value = CStr(Int((TotalBytesTransferred * 10000) / _
        (TotalFileSize * 10000) * 100))
    End With
    DoEvents
  End If
 
  Fortschrittsanzeige = PROGRESS_CONTINUE
End Function

Ein kleines Beispiel:
Platzieren Sie auf die Form1 zwei TextBoxen (txtSource und txtDest), einen CommandButton (cmdCopy), sowie das ProgressBar-Control aus der Windows Common Controls-Collection (Menü Projekt - Komponenten).

' Datei kopieren
Private Sub cmdCopy_Click()
  ' ProgressBar-Control
  Set glbProgBar = ProgressBar1
  ProgressBar1.Value = 0
 
  ' Datei kopieren
  nResult = CopyFileEx(txtSource.Text, _
    txtDest.Text, _
    AddressOf Fortschrittsanzeige, _
    ByVal 0&, _
    bCancel, _
    COPY_FILE_RESTARTABLE)
End Sub

Der Aufruf übergibt der API-Funktion die Quell- und Zieldatei. In der Funktion Fortschrittsanzeige aktualisierenwir die Progressbar. Optional wäre es noch möglich den Vorgang abzubrechen, in dem bCancel = True gesetzt wird.
 

Dieser Tipp wurde bereits 49.447 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel