Avatar billede Lasse Novice
22. oktober 2001 - 20:19 Der er 20 kommentarer og
4 løsninger

path til program

Hvordan faar jeg fat i pathen til exe filen....
Avatar billede tazmanian Nybegynder
22. oktober 2001 - 20:46 #1
???? Mener du, når du har compilet programmet?
Avatar billede jpk Nybegynder
22. oktober 2001 - 22:55 #2
Ikke forstået, forklar venligst...

Avatar billede Lasse Novice
22. oktober 2001 - 23:28 #3
Naar jeg har compilet programmet kommer der en exe fil ud... Jeg vil gerne have stien til denne... Men den kan jo variere hvis jeg flytter programmet.... Derfor vil jeg gerne have stien til biblioteket hvori exe filen ligger
Avatar billede tazmanian Nybegynder
22. oktober 2001 - 23:55 #4
exe-filen skulle meget gerne ligge i samme bibliotek som alle dine andre filer til programmet. Kig i din stifinder under programmer/program files og find Builder (jeg antager du anvender C++ Builder). Herunder ligger mapper, som indeholder dine nye filer inklusive exe-filen. Alternativt kan du angive din egen sti i indstillingerne for Builder.
Avatar billede Lasse Novice
23. oktober 2001 - 00:04 #5
Ja, men det er nu ikke lige det jeg soeger... Jeg skal INDE FRA MIT PROGRAM finde den sti hvor exe filen befinder sig... Jeg som person ved godt hvor programmet ligger, men det er programmet(exe filen) der skal vide hvor den SELV(programmet) ligger
Avatar billede Lasse Novice
23. oktober 2001 - 00:07 #6
OK... det er fanme ikke nemt at forklare... Jeg skal have en funktion der giver foelgende resultat:

1. PC) EXE filen ligger c:\\mitprogram.exe
funktionen jeg soeger skal give resultatet c:\\

2. PC) EXE ligger nu c:\\biblo1\\mitprogram.exe
funktionen jeg soeger skal give resultatet c:\\biblo1\\
Avatar billede tazmanian Nybegynder
23. oktober 2001 - 00:09 #7
ahhhh, det er jo straks noget HELT andet ... der står jeg desværre af ... er ikke lige nået omkring det endnu ... til en skoleopgave?
Avatar billede wisen Nybegynder
23. oktober 2001 - 08:50 #8
...Prøv at kikke på API-kaldet \"GetModuleFileName()\".
Avatar billede borrisholt Novice
23. oktober 2001 - 10:14 #9
prøv noget alla det her : (frit fra leveren)

char  Buffer [260];
GetModuleFileName(0, &Buffer[0], sizeof(Buffer));

Din path til din exe fil ligger nu i Buffer ......

Hvis du kan en smugle pascal vil dette muligvis være dig til hjælp :


function GetParamStr(P: PChar; var Param: string): PChar;
var
  i, Len: Integer;
  Start, S, Q: PChar;
begin
  while True do
  begin
    while (P[0] <> #0) and (P[0] <= \' \') do
      P := CharNext(P);
    if (P[0] = \'\"\') and (P[1] = \'\"\') then Inc(P, 2) else Break;
  end;
  Len := 0;
  Start := P;
  while P[0] > \' \' do
  begin
    if P[0] = \'\"\' then
    begin
      P := CharNext(P);
      while (P[0] <> #0) and (P[0] <> \'\"\') do
      begin
        Q := CharNext(P);
        Inc(Len, Q - P);
        P := Q;
      end;
      if P[0] <> #0 then
        P := CharNext(P);
    end
    else
    begin
      Q := CharNext(P);
      Inc(Len, Q - P);
      P := Q;
    end;
  end;

  SetLength(Param, Len);

  P := Start;
  S := Pointer(Param);
  i := 0;
  while P[0] > \' \' do
  begin
    if P[0] = \'\"\' then
    begin
      P := CharNext(P);
      while (P[0] <> #0) and (P[0] <> \'\"\') do
      begin
        Q := CharNext(P);
        while P < Q do
        begin
          S[i] := P^;
          Inc(P);
          Inc(i);
        end;
      end;
      if P[0] <> #0 then P := CharNext(P);
    end
    else
    begin
      Q := CharNext(P);
      while P < Q do
      begin
        S[i] := P^;
        Inc(P);
        Inc(i);
      end;
    end;
  end;

  Result := P;
end;

function ParamCount: Integer;
var
  P: PChar;
  S: string;
begin
  Result := 0;
  P := GetParamStr(GetCommandLine, S);
  while True do
  begin
    P := GetParamStr(P, S);
    if S = \'\' then
      Break;
    Inc(Result);
  end;
end;

function ParamStr(Index: Integer): string;
var
  P: PChar;
  Buffer: array[0..260] of Char;
begin
  Result := \'\';
  if Index = 0 then
    SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer)))
  else
  begin
    P := GetCommandLine;
    while True do
    begin
      P := GetParamStr(P, Result);
      if (Index = 0) or (Result = \'\') then Break;
      Dec(Index);
    end;
  end;
end;

Hvis det er til C++ Builder så sig lige til så er verden MEGET nemmere ...

Jens B
Avatar billede jpk Nybegynder
23. oktober 2001 - 10:34 #10
Eller VC++

CString strPath;
GetModuleFileName(0, strPath.GetBuffer(_MAX_PATH),  _MAX_PATH);
strPath.ReleaseBuffer();
strPath = strPath.Left(strPath.ReverseFind(\'\\\\\')); // Get only the path, not the file name
Avatar billede kamikaze Nybegynder
23. oktober 2001 - 12:12 #11
Ahem... Det kan godt være at jeg har misforstået et-eller-andet, men er det ikke bare:

Application->Path();

Du søger (i Borland C++ Builder). Denne funktion returnerer en AnsiString med stien til din .exe-fil.
Avatar billede borrisholt Novice
23. oktober 2001 - 12:17 #12
Nej Application->ExeName().

Jens B
Avatar billede kamikaze Nybegynder
23. oktober 2001 - 14:00 #13
Okay...ExeName();, men er det ikke også langt det hurgtigste??? (altså kode-mæssigt!)
Avatar billede borrisholt Novice
23. oktober 2001 - 14:05 #14
jo jo .. Problemet er blot at jeg ved ikke hvilken C++ Compiler han bruger ... Hvis mand bruger  VC++ så har vi jo baladen så er der INGENTING der er nemt !

Jens B
Avatar billede jpk Nybegynder
23. oktober 2001 - 14:53 #15
=>borrisholt
Hmm, jeg vil opfatte dit sidste indlæg som et dårligt forsøg på at starte en religionskrig!

Hvis du havde demonstreret et kendskab til VC++, i form af en forklaring på hvorledes man (på påståelig, besværlig vis) kan finde den ønskede oplysning, havde dit indlæg naturligvis været noget nær legalt...
(i øvrigt er det jo ikke compileren, men de libs man har til rådighed, der afgører sagen)

Jeg synes mit tidligere eksempel virker rimelig overkommeligt, men der er faktisk også, i VC++, muligheden for at bruge attributten \'m_pszHelpFilePath\' på application objektet, der også vil indeholde stien til applikationen...
Avatar billede borrisholt Novice
23. oktober 2001 - 14:56 #16
I mit indlæg fra klokken 10:14:14  stod det følgende at læse .....

char  Buffer [260];
GetModuleFileName(0, &Buffer[0], sizeof(Buffer));

Din path til din exe fil ligger nu i Buffer ......

der udover er jeg ikke ude i en religions krig. Jeg har et års professionel erfaring med VC++. Så lidt forstand på det har jeg da ....

Jens B

Avatar billede borrisholt Novice
23. oktober 2001 - 14:58 #17
jpk>> Det med compiler / Libs har du ret i ......

Er der i øvrigt nogen der kan given en forklaring på hvorfor VC++ er så langsom til at compilere sammenlignet med C++ Builder ....

Min test gik ud på at kompilere det der Wordpad eksempel ....

Jens B
Avatar billede jpk Nybegynder
23. oktober 2001 - 15:12 #18
Jeg har ikke selv lavet nogle tests, men udover muligheden for, at kompileren i sig selv er langsommere, kan jeg ikke komme i tanke om andet, end at antallet af libs mm. den søger igennem måske er flere..?
Avatar billede Lasse Novice
23. oktober 2001 - 17:00 #19
hold da fest... der er gang i den herinde.... jeg kigger lige på det om en time
Avatar billede Lasse Novice
23. oktober 2001 - 17:03 #20
jeg bruger i øvrigt VC++ compileren :-(
Avatar billede Lasse Novice
23. oktober 2001 - 17:14 #21
ok, nu er det afproevet... pointene er sat op for jeres ihaerdige indsats... TAK

Avatar billede wisen Nybegynder
24. oktober 2001 - 08:00 #22
Takker for point :)
Avatar billede futter2 Nybegynder
29. oktober 2001 - 21:27 #23
Bare en lille forsinket kommentar
Windows API\'en har også en funktion der hedder GetCommandLine () den indeholder også pathen til exefilen
Avatar billede futter2 Nybegynder
29. oktober 2001 - 21:27 #24
glem det, har lige læst det hele en gang til
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