Avatar billede nca Juniormester
13. februar 2001 - 15:03 Der er 6 kommentarer og
1 løsning

Kopiering af et helt katalog med evt. underkataloger

Hvordan får jeg efterlignet DOS-kommandoen XCOPY *.* /S i Delphi?
Jeg vil altså gerne lave et program der kopierer et helt katalog med filer og evt. underkataloger.
Der skal måske laves noget med FindFirst, FindNext og CopyFile, men hvis én allerede har lavet det, vil jeg gerne aflevere nogle surt opsparede points :-)
Avatar billede borrisholt Novice
13. februar 2001 - 15:06 #1
Du skal bruge en windows funktion der hedder SHFILEOPSTRUCT. På Http://Borrisholt.com under \"FileIO\" finder du et ready-to-go eksemple på hvordan du gøre eksemplet hedder FileHandling.

Jens B
Avatar billede snowball Novice
13. februar 2001 - 15:07 #2
Hent nedenstående eksempel fra borrisholts hjemmeside og kig lidt på det:

http://borrisholt.com/FileIO/DelphiSource/Filehandling.zip

Så kan det ikke gøre nemmere når du skal kopiere foldere med underkataloger ;)

Snowball
Avatar billede borrisholt Novice
13. februar 2001 - 15:07 #3
Du kan eventuelt også selv søge gennem dit fil-træ og kopiere filene en efter en som du finder dem (Det har jeg også kode til). Men hvis det eneste du vil er at kopiere, kan du ligesågodt lade windows gøre det ....

jens B
Avatar billede snowball Novice
13. februar 2001 - 15:08 #4
Nå, han var selv hurtigere ;)

Snowball
Avatar billede borrisholt Novice
13. februar 2001 - 15:09 #5
..igen.
Avatar billede erikjacobsen Ekspert
13. februar 2001 - 15:32 #6
Og ellers er her en stump kode til at gøre det manuelt - hvis der nu
er noget andet der skal gøres undervejs - i hvert fald til inspiration.
Ja, ja, der er \"fejl\" i - filer kan f.eks. ikke begynde med punktum...

  l:=TStringList.Create;        root:=exefile[1]+\':\'+cdkat;
  l.add(\'\');
  while l.count>0 do
  begin
    d:=l.strings[0];
    l.delete(0);
    if FindFirst(root+d+\'\\*.*\',faAnyFile,s)=0 then
    begin
      repeat
        if s.Name[1]<>\'.\' then
        begin
          if (s.Attr and faDirectory)<>0 then
          begin
            l.add(d+\'\\\'+s.Name);
            CreateFolder(Edit1text+\'\\\'+d+\'\\\'+s.name);
          end
          else
          begin
            if not CopyFile(PChar(root+d+\'\\\'+s.Name),PChar(Edit1text+d+\'\\\'+s.Name),false) then
              showmessage(\'Filen \'+ Edit1text+d+\'\\\'+s.Name+ \' kunne ikke oprettes\')
            else
              setfileattributes(PChar(Edit1text+d+\'\\\'+s.Name),0);
          end
        end
      until FindNext(s)<>0;
    end;
  end;
Avatar billede nca Juniormester
13. februar 2001 - 15:34 #7
Det er det mest effektive forum jeg nogen sinde har deltaget. Jeg er helt ked af ikke at kunne tildele point til alle, men da borrisholt både var den hurtigste og den der har lavet programmet får han hermed mine points.
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