Avatar billede lojmann Nybegynder
22. september 1999 - 21:04 Der er 11 kommentarer og
1 løsning

Kopiering af et DIR

Hejsa...


Hvordan er det nu man kopiere et helt dir via Delphi???

Jeg har det sted hvor filerne ligger, og angiver vie Edit1 hvor filerne skal kopieres til, men hvordan er det nu man gør??

Jeg bruger Delphi 3 Std.
Avatar billede TRoXa Novice
23. september 1999 - 08:21 #1
uhmm du kunne fx lave en TStringlist og så smide alle filer ind i den, og så
kunne du lave noget der ligner dette
var i:integer;

for i : 0 to stringlist.items.count -1 do
  begin
    copyfile(mappe + stringlist.items[i],edit1.text)
  end;

uhmm jeg er ikke helt sikker på om det er sådan stringlist virker... har aldrig brugt den *g* men ellers kan du bare lige se i hjælpefilen om stringlist

Jeg kan godt forstille mig at jeg har lavet et eller andet galt her, men det er vist den nemmeste måde da der ikke er en commando der hedder CopyDirectory hehe
Avatar billede snorga Nybegynder
23. september 1999 - 09:11 #2
Det vil kun virke hvis der ikke er undermapper i mappen.

med hensyn til TStringList'en, så skal du huske og oprette den, og nedlægge den når du er færdig.

Ellers kan du prøve dette:
-------------- KLIP ---------------

Uses FileCTRL;

Procedure CopyDir(fra,til:string);
var
  SearchRec: TSearchRec;
begin
  If Copy(fra,Length(fra),1)<>'\' then Fra:=fra+'\';
  If Copy(Til,Length(Til),1)<>'\' then Til:=Til+'\';
//  Tjek om mapperne findes
  IF not DirectoryExists(fra) then begin showmessage('Mappen "'+fra+'" findes ikke.');exit;end;
  IF not DirectoryExists(til) then begin
    MkDir(Til);
  end;
//Led filerne igennem
  If FindFirst(fra, faAnyFile, SearchRec)=0 Then
  Repeat
    If SearchRec.Attr=faDirectory Then begin
      If (SearchRec.Name='.')or(SearchRec.Name='..') then Continue;
      //Kopier undermappe med
      CopyDir(Fra+SearchRec.Name,Til+SearchRec.Name);
    end else begin
      CopyFile(PChar(Fra+SearchRec.Name),PChar(Til+SearchRec.Name),False);
    end;
  until FindNext(SearchRec) <> 0;
end;
Avatar billede snorga Nybegynder
23. september 1999 - 09:14 #3


Det er noget jeg lige hurtigt har smækket sammen, den kunne godt bruge nogle tjek rundt omkring.

f.eks. Burde den tjekke om den nu også fik oprettet den nye mappe, og om den nu også fik kopieret filen..

Men idéen er der!
Avatar billede snorga Nybegynder
23. september 1999 - 09:30 #4
Woops.. To fejl: Glemte at lukke søgningen, og glemte søgemasken.

Men nu skulle den virke :)

Ny kode:
----------------------------
Procedure Msg(m:string);begin form1.listbox1.items.add(m);end;

Procedure CopyDir(fra,til:string);
var
  SearchRec: TSearchRec;
begin
  If Copy(fra,Length(fra),1)<>'\' then Fra:=fra+'\';
  If Copy(Til,Length(Til),1)<>'\' then Til:=Til+'\';

//  Tjek om mapperne findes
  IF not DirectoryExists(fra) then begin showmessage('Mappen "'+fra+'" findes ikke.');exit;end;
  IF not DirectoryExists(til) then begin
    MkDir(Til);
  end;
//Led filerne igennem
  If FindFirst(fra+'*.*', faAnyFile, SearchRec)=0 Then
  Repeat
    If SearchRec.Attr=faDirectory Then begin
      If (SearchRec.Name='.')or(SearchRec.Name='..') then Continue;
      //Kopier undermappe med
      CopyDir(Fra+SearchRec.Name,Til+SearchRec.Name);
    end else begin
      CopyFile(PChar(Fra+SearchRec.Name),PChar(Til+SearchRec.Name),False);
    end;
  until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
Avatar billede snorga Nybegynder
23. september 1999 - 13:16 #5
Woops igen.. Jeg både hader og elsker copy-paste..

Jeg fik vist lige en lige en forkert linie med:
Procedure Msg(m:string);begin form1.listbox1.items.add(m);end;

Skulle være:
Uses FileCTRL;
Avatar billede TRoXa Novice
23. september 1999 - 15:12 #6
hehe.. det ser vist ud til at jeg ikke får nogle point i denne omgang :( Snorga... hvor længe har du egentlig leget med Delphi ???
Avatar billede snorga Nybegynder
23. september 1999 - 15:18 #7
Godt spørgsmål,

startede med pascal 7-8 år siden (i folkeskolen :-)

Idéen med TStringlist er da heller ikke helt ved siden af!
Avatar billede TRoXa Novice
23. september 1999 - 15:30 #8
nej men jeg glemte det med undermapper :)

Jeg startede først for ca 6-7 måneder siden, men inden da har jeg leget meget med Visual Basic og Quick Basic

Well men jeg synes at du har fortjent de points :)
Avatar billede lojmann Nybegynder
23. september 1999 - 19:56 #9
Procedure Msg(m:string);
begin
form1.listbox1.items.add(m);
end;

Virker ikke her, da jeg ikke har en ListBox!

Jeg skriver i sourcen hvilke mappe der skal kopieres fra, så det er KUN destinationen (der hvor filerne skal hen) som brugeren angiver i et EDIT-felt, som hedder Edit1.

Hvordan kalder jeg så selve "Copy"-proceduren???
Avatar billede snorga Nybegynder
24. september 1999 - 08:46 #10
Procedure Msg(m:string); var en jeg brugte til at teste med, den skulle ikke have været med i svaret. Det var en copy-paste fejl :(

du skal kalde den med:
CopyDir( 'c:\' , edit1.text );

hvor 'c:\' kan byttes ud med det sted du vil kopier fra.
Avatar billede snorga Nybegynder
27. september 1999 - 12:21 #11
Kan du få det til at virke?
Avatar billede lojmann Nybegynder
27. september 1999 - 18:55 #12
Ja, det kan du tro jeg kan.

Alle tiders, du får de 30 point...:-)

--
Thomas.
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