Avatar billede steffe Nybegynder
12. februar 2002 - 15:12 Der er 13 kommentarer

CopyFilesi Dev-Pascal

Hej.
Når jeg prøver denne kode: CopyFile(argv[0], 'tmp.exe');
kommer denne fejl:
Error: Wrong amount of parameters specified

Kan nogen hjælpe mig?
Avatar billede stoney Nybegynder
12. februar 2002 - 15:31 #1
copyfile('c:\test.txt','D:\data\test.txt');

Stoney
Avatar billede hreiff Nybegynder
12. februar 2002 - 16:24 #2
Noget tyder på at argv[0] er tom, sådan at der kun kommer et argument til CopyFile. Såvidt jeg husker er argv[0] exe-filen som køres (?), men jeg mener også at det er en pointer, så du skal nok bruge argv[0]^ - altså det argv[0] peger på.
Avatar billede djernaes Nybegynder
12. februar 2002 - 17:36 #3
Hej,

Er du sikker paa et det ikke er ParamStr(0) du gerne vil have?

"argv" er (ofte) brugt i C for kommandoline parameters. I Pascal er det ParamStr (antal er ParamCount).

Martin
Avatar billede steffe Nybegynder
12. februar 2002 - 19:43 #4
Jeg er sikker på at det er argv[0], fordi hvis jeg benytter ParamStr(0) for denne fejl:
Error: Incompatible type for arg no. 2: Got ANSISTRING, expected PCHAR

Jeg har prøvet disse koder:
copyfile(PcHar(ParamStr(0)), 'tmp.exe');
copyfile(argv[0]^, PcHar('tmp.exe'));
Da den skriver PcHar.
Avatar billede hreiff Nybegynder
12. februar 2002 - 19:45 #5
Eventuelt er det fordi CopyFile forventer en 0-afsluttet streng, så du kan prøve:

CopyFile(ParamStr(0)+#0,'tmp.exe');
eller
CopyFile(argv[0]+#0,'tmp.exe');
Avatar billede steffe Nybegynder
12. februar 2002 - 19:49 #6
Jeg har lige prøvet dine koder og får disse fejl:
1)
Error: Incompatible types: got "CHAR" expected "LONGINT"
2)
Error: Wrong amount of parameters specified
Avatar billede hreiff Nybegynder
12. februar 2002 - 19:56 #7
Du skal huske at reservere plads til din PChar:

const
  maxchar = 128;  {her sætter du max tegn (husk plads til stien)}
var
  PCh: PChar;

  PCh := StrAlloc(MaxChar); {reserverer plads til strengen}
  StrPCopy(PCh,paramstr(0); {Overførsel til PChar}

  CopyFile(PCh,'tmp.exe');
Avatar billede steffe Nybegynder
12. februar 2002 - 20:02 #8
Jeg har lige prøvet koden og jeg fik disse fejl:
Error: Identifier not found STRALLOC
Error: Identifier not found STRPCOPY
+ lidt flere

Jeg bruger Bloodshed Dev-Pascal fra Bloodshed.net.
Avatar billede hreiff Nybegynder
12. februar 2002 - 20:06 #9
CopyFile har 3 argumenter:

CopyFile(PCharOldFile,PCharNewFile,Bool);

Hvor din boolean betyder følgende:

Hvis True fejler funktionen hvis NewFile allerede eksisterer
Hvis False overskrives NewFile hvis den eksisterer

dvs:

const
  maxchar = 128;  {her sætter du max tegn (husk plads til stien)}
var
  ToFile: string;
  PChIn,PChOut: PChar;
  OverWrite: Boolean;
Begin
  Overwrite := True;
  ToFile := 'c:\temp.exe';
  PChIn := StrAlloc(MaxChar); {reserverer plads til strengen}
  PChOut := StrAlloc(MaxChar);
  StrPCopy(PChIn,paramstr(0)); {Overførsel til PChar}
  StrPCopy(PChOut,ToFile);

  CopyFile(PChIn,PChOut,OverWrite);
end;
Avatar billede hreiff Nybegynder
12. februar 2002 - 20:14 #10
Ok, så ikke seneste.

Du kan også prøve at overføre manuelt til en array of char = PChar^
Husk 0-afslutningen;

var
  PC: array[1..128] of char;

  PC := ParamStr(0)+chr(0);

  CopyFile(PC,......

Hvis du ikke kan overføre direkte må du lave en løkke:
for i := 1 to length(ParamStr(0)) do
  PC[i] := paramstr(0)[i];
PC[length(ParamStr(0)+1] := chr(0);
Avatar billede hreiff Nybegynder
13. februar 2002 - 08:09 #11
Du kan også selv gå ind og definere dine pointere:

Type
  PCharArr=Array[1..128] of char;

Var
  PCh1,PCh2: PCharArr;
  P1,P2: ^char; 
  st: string;
  OverWrite: boolean;

Function StrToPChar(const s: string):PCharArr;
var
  i: integer;
begin
  for i := 1 to length(s) do
    StrToPChar[i] := s[i];
  StrToPChar[i+1] := chr(0);
end;

begin
  st := 'c:\tmp.exe';
  Overwrite := True;
  PCh1 := StrToPChar(paramstr(0));  {eller argv[0] ?}
  PCh2 := StrToPChar(st);
  P1 := @PCh1[1];    {pointer til første tegn i array}
  P2 := @PCh2[1];
  CopyFile(P1,P2,OverWrite);
end;

Ellers må du kopiere via blockRead / blockWrite
Avatar billede unclebug Nybegynder
13. februar 2002 - 14:04 #12
Hvad er dev-Pascal?

CopyFile(pchar(ParamStr(0)), 'e:\temp\test.exe', FALSE);

Denne virker for mig.. (CopyFile er fra Windows.pas)
Avatar billede steffe Nybegynder
13. februar 2002 - 19:53 #13
unclebug. Dev-Pascal er lige som Delphi(Pascal) men programmerne bliver ikke mere en 5-50 KB store. Hent det på: http://www.Bloodshed.net det fylder ca. 8 MB.
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