Entwickler-Ecke

Dateizugriff - Datei zum kopieren auswählen


JustusJonas - Mi 30.11.05 11:20
Titel: Datei zum kopieren auswählen
Hallo Leute,

ich habe ein Programm geschrieben, dass Dateien kopieren soll.
Nun möchte ich aber alle Dateien, die mit "EH" beginnen in ein anderes Verzeichnis kopieren.
Ich habe das ganze versucht so zu lösen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
while FindFirst(Quelle, 0, sr ) = 0 do //So lange Dateien gefunden werden
  begin
     InDatei := ExtractFilePath(Quelle) + sr.Name;
     OutDatei := Ziel +  sr.Name;
     OutDateiBackup := Backup + '\' + sr.Name;
     if sr.Name <> 'EH*.*' then
       begin
         ForceDirectories(Ziel2); //Out-Verzeichnis erstellen
         FileCopy(InDatei, Ziel2); //Datei ins Ziel-Verzeichnis kopieren
       end
         else
           begin
             ForceDirectories(Ziel); //Out-Verzeichnis erstellen
             FileCopy(InDatei, Ziel); //Datei ins Ziel-Verzeichnis kopieren
           end;
     MailBody.Add(sr.Name + ' ins Ziel-Verzeichnis (' + Ziel + ') kopiert');
     ForceDirectories(Backup); //Backup-Verzeichnis ohne Unterverzeichnis erstellen
     FileMove(InDatei, Backup); //Datei ins Backup-Verzeichnis verschieben
     MailBody.Add(sr.Name + ' ins Backup-Verzeichnis (' + Backup + ') verschoben');
     mMeldung.Lines.Add(GetDatum + ' - ' + GetTime + ': Datei(en) kopiert!');
     inc(i);
     SendFiles := True;


Funktioniert aber leider nicht :(
Delphi kopiert alle Dateien nach Ziel2 und die anderen nicht mehr nach Ziel! :(

Was mache ich falsch?

Greetz


Sirke - Mi 30.11.05 11:23

Ich glaube du kannst in Zeile 7 nicht sr.Name <> 'EH*.*' schreiben. Ich würde Funktionen wie Pos() verwenden. Schau dazu einfach mal in die Referenz!


JustusJonas - Mi 30.11.05 12:33

Danke!
Das war der richtige Tipp, hätte ich auch selbst draufkommen können.


Delphi-Quelltext
1:
if copy(sr.Name,0,2) <> 'EH' then ...                    


So gehts! :)

Greetz


Brueggendiek - Do 01.12.05 08:39

Hallo JustusJonas!

Was soll denn das darstellen? while FindFirst ist total falsch! Informiere Dich mal in der OH über FindNext und Findclose!
Inwieweit das Verschieben der Datei auf die Dateisuche einen Einfluß hat, weiß ich nicht. Auf jeden Fall produzierst Du ohne FindClose ein Speicherloch.

Außerdem ruft Du das ForceDirectories für jede Datei erneut auf. Da wird das Programm aber bestimmt super-schnell durch! :mrgreen: Einmal vor der Schleife sollte reichen. Wenn keine leeren Ordner erzeugt werden sollen, verwende ein Boolean-Flag.

Gruß

Dietmar Brüggendiek