![]() |
File beim FTP-Transfer nicht überschreiben
Hallo,
wenn ich mit den Indy Kompos IdFTP ein File auf einen Server hochlade, wird ein gleichnamiges gnadenlos überschrieben. Beim Download mit IdFTP.get kann ich das per Parameter verhindern. Wie kann ich das am Besten beim Upload realisieren? FileExists geht da ja wohl schlecht, oder? Gruß Gambit |
Re: File beim FTP-Transfer nicht überschreiben
So, hier mal meine Lösung:
Delphi-Quellcode:
Die Methode(hier nur ein Ausschnitt) soll alle in aList enthaltenen Dateien(in der Liste steht nat. nur der Pfad) auf den FTP-Server kopieren. Bevor sie das mit idFTP.put() macht, guckt sie per idFTP.List() auf dem Server nach, ob eine Datei mit dem Namen vorliegt. Wenn ja, schreibt sie den Namen der Datei in die FileExstists-Liste.
FileExistsList:= TStringList.Create;
for i:= 0 to aList.Count-1 do try begin IdFTP.List(FileExistsList, ExtractFilename(aList.Strings[i]), false); If FileExistsList.Count < 1 then IdFTP.Put(aList.Strings[i], ExtractFilename(aList.Strings[i])) else begin newFilename:= ansiReplaceText(ExtractFilename(aList.Strings[i]), ExtractFileExt(ExtractFilename(aList.Strings[i])), '') +'1'+ExtractFileExt(ExtractFilename(aList.Strings[i])); IdFTP.Put(aList.Strings[i], newFilename); end; FileExistsList.Clear; end; except ... Ich brauche in jedem Schleifendurchgang also nur gucken, ob in dieser Liste was drinsteht. Ist das der Fall wird die hochzuladene Datei unter anderem Namen abgespeichert, hier in diesem Beispiel wird an den Namen nur ne 1 gehängt. Vielleicht kanns ja mal wer gebrauchen... Gruß Gambit |
Re: File beim FTP-Transfer nicht überschreiben
kleines Update:
Das muss nat. auch bei weiteren Versuchen funzen. Beispiel: man hat das File test.txt, welches auf dem Server schon existiert. Dann würde meine erste Version oben beim ersten mal test1.txt draus machen. Gut, versucht aber jemand noch einmal test.txt hochzuladen, würde test1.txt wieder überschrieben was ja nicht sein soll. Es müsste dann test2.txt entstehen. Deswegen folgende Änderung:
Delphi-Quellcode:
FileExistsList:= TStringList.Create;
for i:= 0 to aList.Count-1 do try if checkPicture(aList, i) then begin IdFTP.List(FileExistsList, ExtractFilename(aList.Strings[i]), false); If FileExistsList.Count < 1 then IdFTP.Put(aList.Strings[i], ExtractFilename(aList.Strings[i])) else begin repeat j:= j+1; FileExistsList.Clear; newFilename:= ansiReplaceText(ExtractFilename(aList.Strings[i]), ExtractFileExt(ExtractFilename(aList.Strings[i])), '') +IntToStr(j)+ExtractFileExt(ExtractFilename(aList.Strings[i])); IdFTP.List(FileExistsList, newFilename, false); until FileExistsList.Count < 1; IdFTP.Put(aList.Strings[i], newFilename); end; end; except ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz