Entwickler-Ecke

Dateizugriff - Dateien 1:1 Kopieren


Vamos - Sa 31.10.09 19:51
Titel: Dateien 1:1 Kopieren
Hallo ihr Lieben,

mein Programm macht irgendwie nicht das, was ich möchte. Er sollte sich aus einer Listbox einen Eintrag(auch Pfad) kopieren und die Quelldatei kopieren und in meinem Zielverzeichnis unter dem Selben Namen speichern.

Mein Ansatz:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin
  forcedirectories('C:\Backups\');
    for k:=0 to listbox9.items.count -1 do
    if listbox9.items[k][1]<>'''' then
    begin
    Copyfile(PChar(ListBox9.Items.Strings[k]), PChar('C:\Backups\'+ListBox9.Items.Strings[k]), true);
    end;


Aber er macht nichts... Wahrscheinlich sage ich ihm das auch :-S

Vielen Dank im Voraus.


Niko S. - Sa 31.10.09 20:33

wenn die Daten in der Listbox auch einen Pfad besitzten, dann probier's doch mal mit


Delphi-Quelltext
1:
PChar('C:\Backups\'+ExtractFileName(ListBox9.Items.Strings[k]))                    


Also wenn die Daten in der Listbox so aussehen:
C:\ein Ordner\Noch einer\datei.endung


Bergmann89 - Sa 31.10.09 21:37

Hey,

wie sehen denn die String in der Liste aus? Und soll er nur alle Datein in den Backup-Ordner kopieren, oder soll er auch die Unterordner des Source-Folders erstellen?

MfG Bergmann.


Delete - Sa 31.10.09 22:25

Was mich immer stört ist, dass hier sofort gepostet wird ohne das vorher mal selbst geguckt wird, wo der Fehler liegen könnte. Suche im MSDN COPYFILE hat zum Beispiel einen Rückgabewert und wenn es fehlschlägt kann man den Wert von Suche im MSDN GETLASTERROR abfragen und meist erfährt man dann den Grund, warum eine Funktion fehlgeschlagen ist. Desweiteren wird anscheinend erst gar nicht selber debuggt, sondern es wird gehofft, dass unsere Glaskugeln dies erledigen.

Und warum prüfst du, ob das erste Zeichen eines Listbox Eintrages leer ist? Wird dadurch die Kopier-Funktion überhaupt aufgerufen?

Das alles kannst nur du uns sagen. Wir können nur raten. Also bitte erstmal Hausaufgaben (Debuggen, Rückgabewerte auswerten, ...) machen und dann posten.

Hinzukommen ungenügende Informationen. Wie hier auch schon gefragt wurde: Was steht in der Listbox drin? Nur der Dateiname oder auch ein Pfad.


F34r0fTh3D4rk - So 01.11.09 14:59

Handelt es sich bei '''' nicht um ein ' ?
Ergibt für mich an dieser Stelle recht wenig Sinn. Gemeint wahr vermutlich:
[Glaskugel]

Delphi-Quelltext
1:
listbox9.items[k]<>''                    

[/Glaskugel]


Bergmann89 - Mo 02.11.09 12:55

Hey,

Vlt steht das ja in seiner ListBox, weis ja niemand wie die String da drin aussehen ;)

@Luckie: ich war aber am anfang auch nich anders, hab dann aber mit der Zeit gelernt was man zuerst machen sollte, bzw. welche sachen für eine ordentliche FehlerDiagnose erforderlich sind :P

@Vamos: also wie schon gesagt FehlerCode mit GetLastError Prüfen. Mit SystemErrorMessage bekommt man noch nen schönen Text dazu:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  for i := 0 to ListBox1.Items.Count-1 do
    begin
      CopyFile(PChar(ListBox1.Items[i]),
               PChar(ExtractFilePath(Application.ExeName)+ExtractFileName(PChar(ListBox1.Items[i]))),
               false);
      Memo1.Lines.Add('ListBoxItem: '+IntToStr(i)+' - Error: '+SysErrorMessage(GetLastError));
    end;

un das kommt dabei raus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
LOG:
ListBoxItem: 0
   ItemText: D:\CopyTest\test\Kopie (2) von TEST.txt
   Error: Der Vorgang wurde erfolgreich beendet
ListBoxItem: 1
   ItemText: D:\CopyTest\test\Kopie (3) von TEST.txt
   Error: Der Vorgang wurde erfolgreich beendet
ListBoxItem: 2
   ItemText: D:\CopyTest\test\Kopie (4) von TEST.txt
   Error: Der Vorgang wurde erfolgreich beendet
ListBoxItem: 3
   ItemText: D:\CopyTest\test\Kopie von TEST.txt
   Error: Der Vorgang wurde erfolgreich beendet
ListBoxItem: 4
   ItemText: D:\CopyTest\test\TEST.txt
   Error: Der Vorgang wurde erfolgreich beendet


Und wenn du das so gemacht hast,dann ist es vlt gar nicht mehr nötig, das wir dir helfen den Fehler zu finden, weil du den Fehler schon selbst erkennen kannst. Wir könn dir dann helfen den Fehler zu beseitigen...

MfG Bergmann