Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Le_Ze 22. 05. 2017, 07:28:46
-
Zdravím.
V lazarusu jsem řešil problém jak automaticky zjistit cestu k souboru.
Mam raspberry a když jsem se přes terminal přihlásil jako pi, a spustil můj program, hledal soubory v adresáři pi a ne v adresáři kde je program umístěný.
Vyřešilo to ExtractFilePath(Application.ExeName)
Tato funkce funguje jak pod windows tak i pod linuxem.
Včera byl muj první pokus vytvořít konzolovou aplikací a tuto funkcí mi to nechce sežrat.
project1.lpr(60,37) Error: Identifier not found "Application"
Jak tento problem vyřešít?
-
Application je třída instance TApplication, která je klasicky okenní a je v unitě Forms. V konzolové aplikaci se vyskytovat nebude...
A jak to čistě vyřešit? Nebuď widločuně. Do adresáře s binárkou patří jenom binárka a .so/.dll. Knihovny najde sám. Konfig dej do /etc/aplikace a data/uživatelský konfig do ~/.aplikace.
Důvod je, že ve finále do adresáře s binárkou nesmí být přístup pro zápis uživatelem, který není root. Je to jedno ze základních pravidel bezpečnosti - aplikace spuštěná uživatelem nemůže modifikovat/nakazit jinou aplikaci! Podívej se na widle, kolik tam bylo virů jenom díky tomu, že exáč mohl hrabat do ostatních exáčů a jaký antivirový kšeft se z toho vyklubal.
(Jinak zjistit, odkud běží, se dá jednoduše i u konzolové aplikace. Ale s tímto přístupem si ho nezasloužíš znát - a samostudium je trest na dolní hranici trestní sazby.)
-
V podstatě souhlasím s obsahem toho, co napsal PetrM, i když ne tak docela s formou.
K dotazu - mrkni do unity CustApp, jak se tam zjišťuje cesta k exáči.
Jinak, pokud neznáš, celkem pěkný počtení o cestách je tady: http://wiki.lazarus.freepascal.org/Multiplatform_Programming_Guide#Working_with_files_and_folders
-
ParamStr[0].
-
Já pro tyto případy používám toto:
SetCurrentDir(ExtractFilePath(ParamStr(0)));
a pak už stačí jen
assignfile(f,'mujsoubor');
-
... cesta k souboru je dlouha a trnita jako z pekel do nebes ...