Datei kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Gast

Datei kopieren

Beitrag von Gast »

Ich habe ein problem mit meinem Programm, und zwar will ich das wenn man nur eine datei kopiert, der frotschritt in der progressbar angezeigt wird.
Aber nich von 0 auf 100 direckt, sondern wirklich der fortschrit.
Bei mir sieht das so aus, aber das ist ja falsch, weiß nur leider nicht die lösung.

Code: Alles auswählen

anzahl = FileSize(name)
       If CopyFile(datei,ziel + GetFilePart(datei)) = 0
         MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
       Else
         For k = 0 To anzahl
         SetGadgetState(8,k)
         Next 
         MessageRequester("Info","Die Datei wurde erfolgreich kopiert")
         SetGadgetState(8,0)
       EndIf 
Bitte um Hilfe
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit Copyfile ist das unmöglich! Frage wurde schon mal gestellt, vielleicht mal suchen.
Ansonsten, File erstellen, und etappenweise mit WritData schreiben,
zwischendurch die Progressbar aktualisieren. Müssen schon extrem grosse
Dateien sein, damit sich das lohnt :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Maikel

Beitrag von Maikel »

Hm schade naja danke aber dann lass ich das mal ^^
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Code: Alles auswählen

If CopyFile(datei,ziel + GetFilePart(datei)) = 0 
Tipp: PB 4 bietet den "neuen" Operator Not den du mal ausprobieren könnest!

Ich an deiner Stelle würde dann aber den IF und den Else-Block vertauschen, dann reicht ein simples "IF CopyFile()"... :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Gast

Beitrag von Gast »

tut mir leid ich hab zwar PB4, aber ich kann den Operator Not nicht finden, hast du vieleicht ein beispiel oder so ?
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Not findest Du in der Hilfe unter "Variablen, Typen und Operatoren"

Aber das hilft Dir bei Deinem ursprünglichem Problem eh nicht!
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Datei kopieren

Beitrag von STARGÅTE »

Hier wird der "echte" Kopierfortschritt einer Datei angezeigt:

Code: Alles auswählen

Byte.b
anzahl = FileSize(name)
If ReadFile(1, datei)
 If CreateFile(2, ziel + GetFilePart(datei))
  For k = 0 To anzahl
   UseFile(1) : Byte = ReadByte()
   UseFile(2) : WriteByte(Byte)
   SetGadgetState(8,k)
  Next 
  MessageRequester("Info","Die Datei wurde erfolgreich kopiert")
  SetGadgetState(8,0)
  closefile(2)
 Else
 MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
 EndIf
 closefile(1)
Else
 MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das Prinzip von STARGÅTE seinem Code ist richtig, aber entsetzlich langsam.
Desweiteren sollte nicht Byteweise, sondern der Dateigröße angepaßte
Häppchen genommen werden (wie bereits weiter oben von mir kurz
beschrieben)

Es ist aber sehr zweifelhaft, das sich der User über den echten Fortschritt bei
einzelnen Dateien freut, wenn er weiß, das das eigentliche Kopieren dadurch
ein vielfaches dauert. Lediglich bei vielen Dateien ist sowas sinnvoll.

Notfalls einen gefakten Fortschritt einbauen (z.B. per Timer), so das der
User das Gefühl hat, es passiert noch was. Sowas machen sogar prof.
Programme :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gast

Beitrag von Gast »

Ich möchte mich schonmal für den Codeschnipsel bedanken, aber der kann bei mir mit usefile() nichts anfangen.

ja das mit dem gefaketn fortschrit hab ich mir auch schon gedacht, ich denke auch mal das ich das mache
Zuletzt geändert von Gast am 11.11.2006 19:16, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Maikel hat geschrieben:Ich möchte mich schonmal für den Codeschnipsel bedanken, aber der kann bei mir mit usefile() nichts anfangen.

Code: Alles auswählen

Byte.b
anzahl = FileSize(name)
If ReadFile(1, datei)
 If CreateFile(2, ziel + GetFilePart(datei))
  For k = 0 To anzahl
   Byte = ReadByte(1)
   WriteByte(2, Byte)
   SetGadgetState(8,k)
  Next
  MessageRequester("Info","Die Datei wurde erfolgreich kopiert")
  SetGadgetState(8,0)
  CloseFile(2)
 Else
 MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
 EndIf
 CloseFile(1)
Else
 MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
EndIf
Ungetested nach PB4 geändert
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten