Seite 1 von 1

Datei kopieren mit Progressbar?

Verfasst: Fr, 03. Feb 2017 14:33
von mini990
Hallo,
Progressbar bei Index oder DBF kopieren funktioniert bei mir.
Wie kann man eine Fortschrittsanzeige beim Kopieren beliebiger Dateien generieren?
Gibt's da was und ich finde es nur wieder mal nicht??? :roll:

Gruß Stefan

Re: Datei kopieren mit Progressbar?

Verfasst: Fr, 03. Feb 2017 22:19
von DelUser01
Hallo Stefan,

wenn Du Dir eine Funktion schreibst mit FOpen, FRead, FWrite usw. kannst Du anhand der Größe der zu kopierenden Datei und der Größe Deines festgelegten Schreib-/Lese-Buffers den Progress-Balken steuern.

Re: Datei kopieren mit Progressbar?

Verfasst: Fr, 03. Feb 2017 22:46
von AUGE_OHR
ich nehme zum kopieren unter Windows den Explorer. die dazu notwendigen Methoden

Code: Alles auswählen

   INLINE METHOD Move()   ; ::nOp := 0x0001 ; return ( ::Start() == 0 )
   INLINE METHOD Copy()   ; ::nOp := 0x0002 ; return ( ::Start() == 0 )
   INLINE METHOD Delete() ; ::nOp := 0x0003 ; return ( ::Start() == 0 )
   INLINE METHOD Rename() ; ::nOp := 0x0004 ; return ( ::Start() == 0 )
findet man in der SHfile API.
Phil Ide hat ein Demo mit BAP gemacht was in der ASCN "sein sollte"
Pablo hat mit ot4xb die Class TShFileOperation geschrieben.

natürlich kann du es auch in "pure" Xbase++ mit FOPEN()/FCREATE()/FREAD()/FWRITE() machen und meinen DXE_Progressbar verwenden.

Tip : Puffer Grösse und Progressbar in 1% Schritten "abstimmen"

Code: Alles auswählen

// siehe Help File FWRITE() Beispiel

   // nur 1% Schritte
   nEvery  := INT(nMax/100)
   // modify
   cBuffer := Space( nEvery )
   nBytes  := nEvery
   // modify
   DO WHILE FError() == 0 .AND. nSum < nMax
      // modify
      nBytes := FRead( nSource, @cBuffer, nEvery )
      FWrite( nTarget, Left(cBuffer, nBytes) )

      // sum bytes
      nSum += nBytes
      FORproggress(oProgress,nEvery,nSum)
   ENDDO

Re: Datei kopieren mit Progressbar?

Verfasst: Sa, 04. Feb 2017 7:36
von Herbert
Es ist besser, nicht bei jedem Fwrite den Progressbaraufruf zu machen, sondern etwa jedes oder je nach Grösse jedes 50. Mal, sonst verliertst du Performance.

Re: Datei kopieren mit Progressbar?

Verfasst: Sa, 04. Feb 2017 9:21
von AUGE_OHR
Herbert hat geschrieben:Es ist besser, nicht bei jedem Fwrite den Progressbaraufruf zu machen, sondern etwa jedes oder je nach Grösse jedes 50. Mal, sonst verliertst du Performance.
JA, du hast Recht.
in diesem Fall hatte ich schon Puffer Grösse und Progressbar in 1% Schritten "abgestimmen"

sonst wäre es so

Code: Alles auswählen

FUNCTION FORproggress(oProgress,nEvery,i)
LOCAL nValue := i
   // only 1% Step
   IF ((nValue) % (nEvery)) == 0
      nValue := oProgress:GetData()
      nValue += nEvery
      oProgress:SetData( nValue )
   ENDIF
RETURN .T.

Re: Datei kopieren mit Progressbar?

Verfasst: Mo, 06. Feb 2017 9:27
von mini990
Guten Morgen,
habe es jetzt mal mit den Explorer Funktionen probiert.
Kann man Dateien auch ohne Nachfrage überschreiben?

Gruß Stefan

Re: Datei kopieren mit Progressbar?

Verfasst: Mo, 06. Feb 2017 9:29
von mini990
Hat sich erübrigt.......
wer lesenkann... :-)

Gruß Stefan