Avatar billede hugopedersen Nybegynder
27. januar 2010 - 10:55 Der er 6 kommentarer og
1 løsning

Smartere måde at gøre dette på

Jeg har et lille program der finder filer fra et directory på min disk og smider dem op på en FTP server.
Jeg looper directoriet + subdirs og smider filnavnene i en listbox (visualisering)
Jeg bruger så nedenstående til at uploade filerne. Men er meget i tvivl om der findes en smartere metode.
(Alle mapperne på FTP serveren er oprettet i en anden funktion og det vireker)

procedure TfrmMain.FTP_Upload;
  var
    intX                    : integer;
    FTPpath                : string;
    FTPfile                : string;
begin
  try
    For intX := 0 To lbFiles.Count - 1 Do
      begin
        Panel_Update(1, 'Uploader fil ' + IntToStr(intX + 1) + ' af ' + IntToStr(lbFiles.Count) + ' filer.');
        Try
          barProgress.Position := 0;
          FTPpath := ExtractFilePath(lbFiles.Items[intX]);
          Delete(FTPpath, 1, Length(Settings.FTP_LocalDir));
          if FTPpath = '' Then
            FTPpath := '//';
          FTPpath := Trim(stringReplace(FTPpath, '\', '/', [rfReplaceAll, rfIgnoreCase]));
          if RightStr(FTPpath, 1) = '/' then
            begin
              FTPpath := LeftStr(FTPpath, Length(FTPpath) - 1);
            end;
          if (FTPpath <> Settings.FTP_HostDir) And (FTPpath <> '/') then
            idFTP.ChangeDir(FTPpath)
          else
            idFTP.ChangeDir('/' + Settings.FTP_HostDir);
          Logfile.Event('FTP upload', 'Skift mappe', '# ' + FTPpath + ' #');
          barProgress.Max := FileSize(lbFiles.Items[intX]);
          FTPfile := Trim(ExtractFileName(lbFiles.Items[intX]));
          idFTP.Put(lbFiles.Items[intX], FTPfile);
          Logfile.Event('FTP upload', 'Put file', '# ' + FTPfile + ' #');
          idFTP.ChangeDir('/' + Settings.FTP_HostDir);
        Except
          Logfile.Error('Fejl under upload af fil: ' + lbFiles.Items[intX] + ' til: ' + '# ' +  FTPpath + FTPfile + ' #');
        end;
        Application.ProcessMessages;
      end;
  finally
    Panel_Reset;
  end;
end;
Avatar billede arne_v Ekspert
31. januar 2010 - 04:01 #1
Jeg kan ikke umiddelbart se nogen bedre algoritme.

Kodemæssigt ville jeg finde det attraktivt at flytte fil sti&navn manipulationen ud i nogle separate funktioner.
Avatar billede hugopedersen Nybegynder
01. februar 2010 - 08:25 #2
Det har jeg så gjort :-)

Nu mangler jeg bare en måde at følge status på hvad der sker - alle meddelelelser fra FTP serveren vil jeg gerne kunne vise.
Jeg har fanget at kunne vise progress på den enkelte fil.
Avatar billede hugopedersen Nybegynder
01. februar 2010 - 08:26 #3
Det skulle have været en opfordring til at smide et svar også.
Avatar billede arne_v Ekspert
01. februar 2010 - 18:52 #4
Du skal vel appende alle FTP svar kommandoer til et memo felt. Hvis de altsaa skal vises. Hvis det kun er for troubleshooting var en log fil maaske bedre.
Avatar billede arne_v Ekspert
01. februar 2010 - 18:52 #5
og et svar
Avatar billede hugopedersen Nybegynder
01. februar 2010 - 19:17 #6
Det ville være rigtig fint bare med replies og jeg har i forvejen en Logfile class til at håndtere debug, event, error og logfiler. Så jeg skal bare have fat på teksten :-)
Og .Status giver en masse intetsigende.
Avatar billede arne_v Ekspert
02. februar 2010 - 01:33 #7
Prøv .LastCmdResult !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester