Pascal - Exec eljárási probléma/kérdés?!
Adott egy program, melyben használok akár egy vagy több exec eljárást, hogy külső programokat futtathassak.
A kérdésem az lenne, hogyan lehetne megoldani, hogy ne fix helyre mutasson az exec eljárás tartalma, hanem ahova az adott programomat telepítem/helyezem.
Példa:
Megírtam egy programot amely c:\test mappában található. A külső programok is (amelyet az imént megírt program használni fog) szint úgy itt vannak. Hogyan lehetne megoldani, hogy akkor is futtassa az külső programokat a főprogram, hogy, ha áthelyezem mondjuk az egész MAPPÁT a D:\test2\ mappába, vagy bárhova? (Természetesen mindenhova az egész mappát)
Eddig így használtam:
exec('C:\Windows\System32\cmd.exe', '/C "C:\test\valami.exe"');
De látható, hogy ennél a verziónál a valami.exe fájlnak fix hely van meghatározva mégpedig a C: meghajtón.
Nem tudom mennyire triviális a válasz a kérdésre, de én nem jöttem rá a probléma megoldására.
A válaszokat előre is nagyon köszönöm!
Egy kisebb példa programot/programrészt tudsz írni, ha nem nagy kérés?
Köszönöm a segítséged!
program Project1;
{$mode objfpc}{$H+}
uses sysutils;
begin
WriteLn(ExtractFilePath(ParamStr(0)));
ReadLn;
end.
Szia.
ProgUtv:=StringMasolasaAzUtolsoJelig(Paramstr(0),'\');
A "StringMasolasaAzUtolsoJelig" függvényt neked kell megirni a következőképpen :
A paramstr (0) egy string ami tartalmazza a programod teljes elérési útvonalát és a programod nevét is (kiterjesztéssel együtt), tehát : C:\test\valami.exe a paramstr (0) tartalma ha a C:\Test mappából inditoták a Valami.exe nevű programot) .
Inditasz egy ciklust a string végétől az eleje felé (a while jobban megfelel most az igényeknek mint a for ciklus) és megnézed a string aktuális karaktere olyan-e mint a keresett karakter ('\' blackslash) ha olyan akkor eltárolod a string aktuális pozicióját és kilépsz a ciklusból.
Most lemásolod az átadot stringnek - paramstr (0) -
az első karakterétől a megjegyzett pozicióig a karaktereket egy másik stringbe (copy parancs) és a függvény ezzel az új stringgel tér vissza.
Vagy úgy készited el a másolást, hogy az utolsó karakter még benne van a végső stringben, vagy úgy, hogy az már nincs benne ez felhasználástől függ.
Megkapod a programod elérési utvonalát, bárhonnan is inditották.
Sok sikert.
üdv.
Ha már visszacsorgunk a Turbo Pascal-hoz neki is volt erre beépített függvénye az FSplit:
program valami;
uses Dos;
function eleresi_ut : string;
var P : PathStr;
D: DirStr;
N: NameStr;
E: ExtStr;
begin
FSplit(ParamStr(0), D, N, E);
eleresi_ut := D;
end;
begin
WriteLn(eleresi_ut);
end.
Nagyon szépen köszönöm a válaszokat, rendkívül hálás vagyok!
A problémát sikeresen megtudtam a segítségekkel oldani így lassan betudom fejezni ezt a pascal projektet.
További szép napot, minden jót a továbbiakban és még egyszer köszönöm!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!