Avatar billede krab Praktikant
13. april 2002 - 23:01 Der er 25 kommentarer og
1 løsning

COPY FILE

Hvis jeg nu har et program der hedder FX. ok.exe hvordan for jeg den så til at kopire sig selv når jeg klikker på den, (hvad er koden for at kopire en fil),
jeg ved ikke hvordan jeg skal forklare det, håber det går.
Avatar billede tblaster Nybegynder
13. april 2002 - 23:02 #1
Hvis du mener at du vil trykke på en fil og så lave et kopi af den så er koden:
Ctrl+c (Copy)
Ctrl+v (Paste)
Avatar billede jow Nybegynder
13. april 2002 - 23:02 #2
højreklik på den og vælg kopier. (copy hvis det er engels version). Eller brug shortkeys:
Ctrl-C = Kopier/Copy
Ctrl-V = Sæt ind/paste
Avatar billede phrozia Juniormester
13. april 2002 - 23:02 #3
hmm.. gammel dos er jo copy x.com z.com ...

og i delphi kan du jo lave en winexe(copy fil fil2)

Det er MEGET længe siden jeg har rodet med delphi, så dette er nok ikke den mest optimale programmering, men den burde funke...
Avatar billede krab Praktikant
13. april 2002 - 23:03 #4
Det ved jeg sku godt, det er ik det jeg mener, men i delphi skal jeg lave noget i onformcreate så den kopire sig selv et andet sted hen på harddisken.
Avatar billede krab Praktikant
13. april 2002 - 23:05 #5
<<jow>> kan du give en lidt mere precis forklaring?
Avatar billede krab Praktikant
13. april 2002 - 23:05 #6
mener phrozia  min fejl.
Avatar billede dkn Nybegynder
13. april 2002 - 23:08 #7
Procedure FileCopy(sourcefilename, targetfilename: String );
Var
  S, T: TFileStream;
Begin
if fileexists(sourcefilename) then
begin
    S := TFileStream.Create( sourcefilename, fmOpenRead );
    try
      T := TFileStream.Create( targetfilename, fmOpenWrite or fmCreate );
      try
        T.CopyFrom(S, S.Size ) ;
      finally
        T.Free;
      end;
  finally
  S.Free;
  end;
end;
end;

//
FileCopy('C:\Hej.txt', 'C:\Min Mappe\Hej.txt');
Avatar billede dkn Nybegynder
13. april 2002 - 23:09 #8
FileCopy(application.exename, 'C:\Mit Kopi.exe');
Avatar billede phrozia Juniormester
13. april 2002 - 23:10 #9
Hehe.. troede du jokede med dem.. hehe...

Hmm jo..

I gamle dage var en kopiers kommando i DOS ex.:

copy c:\fil.exe d:\fil2.exe

Så kopiere den fil.exe til d-drev med fil2 som navn.

I delphi kan man execute andre programmer med en kommando der hedder

winexec(fil,1);

om der står 1 eller 0 er om man skal kunne se hvad den executer.

1 = man kan se
0 = man kan ikke, den kører det i baggrunden.

Så laver du en ting som hedder noget ala

inexec(copy c:\fil1.exe d:\fil2.exe,0);
Avatar billede krab Praktikant
13. april 2002 - 23:11 #10
Hvad betyder sourcefilename
Avatar billede phrozia Juniormester
13. april 2002 - 23:11 #11
inexec(copy c:\fil1.exe d:\fil2.exe,0);

skal være

winexec(copy c:\fil1.exe d:\fil2.exe,0);

men dkn's svar er nok ret så meget bedre.. som sagt, det er længe siden jeg rodede med det.. :)
Avatar billede dkn Nybegynder
13. april 2002 - 23:15 #12
edt betyder ikke andet end proceduren skl kaldes med to string værdier, og sourcefilename er den ene.
Avatar billede krab Praktikant
13. april 2002 - 23:19 #13
nor jeg bruger dette
winexec(copy c:\fil1.exe d:\fil2.exe,0);
for jeg en fejl der siger
[Error] Unit1.pas(28): '(' expected but identifier 'c' found
[Error] Unit1.pas(28): Not enough actual parameters
[Error] Unit1.pas(28): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Avatar billede Slettet bruger
13. april 2002 - 23:31 #14
glem den men ellers skal den se sådan ud

winexec('copy c:\fil1.exe d:\fil2.exe',0);

gå hellere ind på www.borisholt.com og se hans filbehandlings eksempel

Mvh. Simon
Avatar billede Slettet bruger
13. april 2002 - 23:33 #15
Avatar billede phrozia Juniormester
13. april 2002 - 23:35 #16
tankred> Flot kopiret!
Avatar billede Slettet bruger
13. april 2002 - 23:50 #17
???????????
Avatar billede hreiff Nybegynder
14. april 2002 - 10:24 #18
Hvorfor ikke bruge standardproceduren copyfile

  CopyFile(ParamStr(0),'C:\Temp\NyKopi.exe');

(paramstr(0) er navnet på den fil som køres)

//hreiff
Avatar billede phrozia Juniormester
14. april 2002 - 12:08 #19
tankred> Sorry, fik ikke læst krab's indlæg korrekt, så jeg troede du bare havde kopiret mit svar...
Avatar billede krab Praktikant
14. april 2002 - 20:18 #20
//Hreiff
Når jeg bruger denne kode

CopyFile(ParamStr(0),'C:\Temp\NyKopi.exe');

får jeg denne fejl!!

[Warning] Unit1.pas(8): Unit 'FileCtrl' is specific to a platform
[Error] Unit1.pas(56): Incompatible types: 'String' and 'PChar'
[Error] Unit1.pas(56): Not enough actual parameters
[Fatal Error] AaC_server.dpr(5): Could not compile used unit 'Unit1.pas'

Hvorfor?????
Avatar billede krab Praktikant
14. april 2002 - 20:33 #21
det er noget lin dette jeg skal bruge

winexec('copy ????, d:\cd\fil2.exe',0);

det er forskelligt hvor jeg kørere filen fra så jeg kan ikke skrive FX. C:\????.exe, så det skal være når jeg klikker på filen skal den kopire sig selv ind i FX. 'C:\Temp\NyKopi.exe', er der ikke nogle der hved hvordan man gør det.??
Avatar billede hreiff Nybegynder
14. april 2002 - 21:35 #22
Jeg glemte lige at copyfile skal have en 3. parameter
Copyfile(FromFile, Tofile, False);

False > Overwrite hvis filen allerede eksisterer
True  > Fejl hvis filen allerede eksisterer

Det andet er at FromFile og ToFile skal være af typen PChar og ikke string som paramstr(0) returnerer.

Hvis du bruger f.eks

Copyfile('c:\test.exe','c:\test2.exe',False);

virker det, men med paramstr(0) skal det omsættes til PChar;

Prøv:

var PCh: pchar;

PCh := StrAlloc(128); {reserverer plads til strengen (128 tegn)}
StrPCopy(PCh,paramstr(0));
CopyFile(PCh,'c:\temp\prog.exe',False);

//hreiff
Avatar billede ziron Nybegynder
14. april 2002 - 23:52 #23
hmm nu vil jeg ikke sige så meget om copyfile men pchar.

hreiff >> prøv:

Copyfile(PChar('c:\test.exe'),'c:\test2.exe',False);

bare lidt uuuuu :)

/ZIRON
Avatar billede hreiff Nybegynder
15. april 2002 - 07:17 #24
Jeg har efterhånden prøvet en del ting når jeg skulle konvertere fra string til Pchar, og ofte går det galt, f.eks fordi at strengen ikke er afsluttet med #0. Det går fint med Pchar('c:\test.exe'), men PChar(paramstr(0)) kan give problemer - nok fordi det er en funktion.
Man kan også bruge:
var s: string;
s := paramstr(0)+#0;
copyfile(@s[1],'c:\test2.exe',False);
Avatar billede hreiff Nybegynder
15. april 2002 - 07:29 #25
Hvis du vil kunne ændre navnet på kopien kan du gøre sådan:

var
  ind,ud: string;

ind := paramstr(0)+#0;
ud := 'c:\temp\Kopi.exe';
ud := ud+#0;
copyfile(@ind[1],@ud[1],False);

Man kan selvfølgelig også bruge winexec:

var
  s: string
s := 'copy '+paramstr(0)+' c:\temp\Kopi.exe'+#0;
WinExec(@s[1],0);

Men det er en lidt mere omstændig vej idet man kalder programmet copy istedet for at bruge en funktion, så det vil jeg ikke anbefale.
Avatar billede ziron Nybegynder
15. april 2002 - 10:22 #26
hmm okay jeg har bare ikke hafty nogen problemer før, men så tager jeg da mine ord i mig igen :)

/ZIRON
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