Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi File beim FTP-Transfer nicht überschreiben (https://www.delphipraxis.net/42682-file-beim-ftp-transfer-nicht-ueberschreiben.html)

Gambit 22. Mär 2005 14:14


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

Gambit 23. Mär 2005 13:58

Re: File beim FTP-Transfer nicht überschreiben
 
So, hier mal meine Lösung:

Delphi-Quellcode:
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
    ...
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.
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

Gambit 23. Mär 2005 15:09

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 21:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz