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 ...