Avatar billede mrpingo Nybegynder
10. marts 2003 - 15:07 Der er 2 kommentarer og
1 løsning

Kopiering af directory incl. samtlige subdirectories (m. filer)

Jeg leder efter en metode til at kopiere fra et source directory, over til et target directory.
Sourcedirektoriet skal oprettes i targetdirectoriet, og samtlige filer og subdirectories fra source kopieres så med over.
Det eneste der har givet mig problemer er at få fat i subdirectorierne og så få dem over på target.
Avatar billede dkn Nybegynder
10. marts 2003 - 15:27 #1
uses
  ShellApi; 

procedure TForm1.COPYFolder( src, dest : string );

var
  sts : Integer ;
  SR: TSearchRec;

begin
  sts := FindFirst( src + '*.*' , faAnyFile , SR );
  if sts = 0 then
    begin
      if ( SR.Name <> '.' ) and ( SR.Name <> '..' ) then
        begin
          //Put User Feedback here if desired
          Application.ProcessMessages;
          if pos('.', SR.Name) = 0 then
            begin
              {$I-}MkDir( dest + SR.Name ) ;{$I+}
            COPYFolder( src + SR.Name + '\', dest + 
                                    SR.Name + '\' ) ;
            end
          else
            COPYfile( pchar(src + SR.Name), pchar(dest + sr.name),
                          true );
        end;
      while FindNext( SR ) = 0 do
        begin
          if ( SR.Name <> '.' ) and ( SR.Name <> '..' ) then
            begin
              //Put User Feedback here if desired
              Application.ProcessMessages;
              if Pos('.', SR.Name) = 0 then
                begin
                  {$I-}MkDir( dest + SR.Name );{$I+}
                  COPYFolder( src + SR.Name + '\', dest + SR.Name
                                    + '\' ) ;
                end
              else
                COPYfile( pchar(src + SR.Name), pchar(dest +
                              sr.name), true );
            end;
        end;
      FindClose( SR ) ;
    end ;
end;


dette kan bruges, mener dog også der er et api kald
Avatar billede jpvj Nybegynder
10. marts 2003 - 15:28 #2
Nu har jeg ikke liiige kodet Delphi i 1 års tid, og slet ikke filhåndtering. En mulig fremgangsmåde er, at du finder alle filer i mappen incl. foldere. Hver gang du finder en folder, kalder du din kopi funktion rekursivt.

I Pseudokode ser det således ud.

procedure kopier(start sti, subdir, filmaske, target sti)
begin
  findfirst(start sti, filmaske ...); // kan ikke huske syntaxen.
  while not (sidste fil/directory)
    if directory then // dvs. resultatet fra findfirst/next er et directory
    begin
      Hvis target sti+directory ikke eksisterer så opret
      kopier(start sti, directory, filmaske, target sti);
    end else
      kopier fil til target sti+directory
    end;
    findnext();
  end;
end;

Du starter kopieringen med at kalde
kopier(source, "", filmaske, target)
Avatar billede jpvj Nybegynder
10. marts 2003 - 15:29 #3
Nå ... det var der vist andre der havde liggende :-)
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