Avatar billede koonz Nybegynder
08. september 2006 - 09:18 Der er 3 kommentarer og
1 løsning

TSheelListView - kopier alt incl foldere til FTP (En slags loop)

Hej
Jeg benytter er TShellListView samt en idFTP.
Jeg skal have alle filer i alle foldere kopieret over på min ftp server.
Mit problem er niveauet af foldere og filer - nedestående kode virker jo kun på et niveau.
Sagt på en anden måde - hvordan får jeg åbnet alle min "subfolders" og kopieret alle filer i disse foldere - indtil der ikke er flere filer/foldere.

for i := 0 to fileviewIndividual.Items.Count-1 do
  begin
    if fileviewIndividual.Folders[i].IsFolder then
    begin
    end
  else
Avatar billede martinlind Nybegynder
08. september 2006 - 09:26 #1
Du skal lave en rekursiv rutine, dvs. en der kalder sig selv indtil der ikke er flere bib./filer. Hvis du søger efter noget diskscan burde du kunne finde noget kode her på siden.
Avatar billede koonz Nybegynder
08. september 2006 - 10:32 #2
Hej Martin

rekursiv rutimer er ikke noget je ghar rodet med før - jeg fandt følgende, men det hjælper mig ikke rigtigt - har du kendskab til et bedre eksempel ?

if FindFirst(IncludeTrailingBackslash(CPath)+\'*.*\',faANYFILE,S) = 0 then
  repeat
      if ( S.Attr and faSysFile = 0 ) and ( S.Attr and faDIRECTORY = 0 ) and
        ( S.Attr and faVolumeID = 0 ) and ( S.Name <> \'.\' ) and ( S.Name <> \'..\' ) then
      begin
        // Do the stoff here
        if OkToAddFile(S.FindData.cFileName) then
          L.AddObject(IncludeTrailingBackslash(CPath)+S.FindData.cFileName,TObject(S.Size));
      end;
  until FindNext(S) <> 0;
  FindClose(S);

  if Subs and ( FindFirst(\'*.*\',faDIRECTORY,S) = 0 ) then
  repeat
      if ( S.Attr and faDIRECTORY <> 0 ) and ( S.Name <> \'.\' ) and ( S.Name <> \'..\' ) then
      begin
        ScanFiles(IncludeTrailingBackslash(CPath)+S.Name,Subs,L);
        ChDir(\'..\');
      end;
  until FindNext(S) <> 0;
  FindClose(S);
Avatar billede koonz Nybegynder
08. september 2006 - 13:35 #3
Hej Igen
Jeg har lavet nedenstående - men det virker ikke helt efter hensigten - jeg har 2 væsentlige problemer

1. Jeg har ikke den totale "sti" i Srec.Name bør jeg tage den med som en parameter?
2. Når jeg opretter ny folder på ftp, skal jeg skifte "ned" i den og tilbage når jeg er færdig met at kopiere alle filer/foldere ned i denne - hvordan implementerer jeg det ?




function TForm1.fCopyAllFilesInFolder(sRoot : String): boolean;
var
  Srec  : TSearchrec;
  dummy : integer;
  sdir  : string;
begin
  result := false;
  sdir := trim(sRoot);
  if sdir = '' then exit;
  if directoryexists(sRoot) then
  begin
    if sdir[length(sdir)] <> '\' then sdir := sdir + '\';
    dummy := FindFirst(sdir+'*.*',faAnyfile, SRec);
    while dummy = 0 do
    begin
      if srec.attr = fadirectory then
      begin
        ftp.MakeDir(Srec.Name);
      end
      else
        ftp.Put(sRoot, extractFilename(sRoot));
      dummy := FindNext(SRec);
    end;
    findclose(SRec);
  end;
  result := true;  // blev det nu også slettet ?
end;
Avatar billede koonz Nybegynder
16. juli 2013 - 11:13 #4
luk
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