Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Le_Ze 22. 05. 2017, 07:28:46

Název: Lazarus - cesta k souboru
Přispěvatel: 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?
Název: Re:Lazarus - cesta k souboru
Přispěvatel: PetrM 22. 05. 2017, 07:59:56
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.)
Název: Re:Lazarus - cesta k souboru
Přispěvatel: daks 22. 05. 2017, 08:46:30
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
Název: Re:Lazarus - cesta k souboru
Přispěvatel: msx. 22. 05. 2017, 11:47:00
ParamStr[0].
Název: Re:Lazarus - cesta k souboru
Přispěvatel: petr 22. 05. 2017, 12:56:41
Já pro tyto případy používám toto:
 
Kód: [Vybrat]
SetCurrentDir(ExtractFilePath(ParamStr(0)));
a pak už stačí jen
 
Kód: [Vybrat]
assignfile(f,'mujsoubor');
Název: Re:Lazarus - cesta k souboru
Přispěvatel: UF 22. 05. 2017, 13:45:34
... cesta k souboru je dlouha a trnita jako z pekel do nebes ...