Lazarus - cesta k souboru

Le_Ze

  • ***
  • 151
    • Zobrazit profil
    • E-mail
Lazarus - cesta k souboru
« kdy: 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?


PetrM

Re:Lazarus - cesta k souboru
« Odpověď #1 kdy: 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.)

daks

Re:Lazarus - cesta k souboru
« Odpověď #2 kdy: 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

msx.

Re:Lazarus - cesta k souboru
« Odpověď #3 kdy: 22. 05. 2017, 11:47:00 »
ParamStr[0].

petr

Re:Lazarus - cesta k souboru
« Odpověď #4 kdy: 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');


UF

Re:Lazarus - cesta k souboru
« Odpověď #5 kdy: 22. 05. 2017, 13:45:34 »
... cesta k souboru je dlouha a trnita jako z pekel do nebes ...