Wenn du den Code ganz genauso wie oben hast, dann liegt es schonmal nicht an diesem, da ja die ersten Verzeichnisse richtig kopiert werden.
Also entweder machst du es in deinem Programm anders, oder die Datei (mit den Verzeichnissen) ist futsch.
Lösung:
1: Datei überprüfen
2: oder uns den "richtigen" Code geben, falls da der Fehler drin ist
3: ...
Kannst ja auch erstmal versuchen noch ein 5. Verzeichniss an die Liste anzuhängen ... mal sehn was dann passiert ^^
[add]
Die Terminierung sieht eigenlich OK aus
[add2]
in der CodeLib gibt's (glaub ich) ein CopyDir (oder wie es da heißt) für mehrere Verzeichnisse, oder halt selbergemacht,
dann wird alles in einem Zug kopiert und wenn du dir dann eventuell noch den Fortschritsdialog anzeigen läßt, dann ist dieser ja auch für alles zusammen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
BackupPfad: String;
bl: TStringList;
i: Integer;
s: String;
fos: TSHFileOpStruct;
begin
bl := TStringList.Create;
//Das folgende wird normalerweise aus einer Datei ausgelesen
bl.Add('C:\Daten\Verzeichnis_1');
bl.Add('C:\Daten\Verzeichnis_2');
bl.Add('C:\Daten\Verzeichnis_3');
bl.Add('C:\Daten\Verzeichnis_4');
BackupPfad := 'T:\Backup\';
if bl.Count > 0 then
begin
s := '';
for i := 0 to bl.Count - 1 do
s := s + bl[i] + #0;
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY;
pFrom := PChar(s + #0);
pTo := PChar(BackupPfad + #0)
end;
ShFileOperation(fos);
end;
bl.Free;
end;
PS: die StringList gibst du doch hoffentlich auch wieder frei? (in deinem richtigen Code)