Umístění txt souboru aplikace   zodpovězená otázka

C#, VB.NET, Architektura

Dobrý den,

měl bych takový dotaz, ohledně umístění txt souboru aplikace. Jedná se o txt soubor ve kterém jsou uloženy nějaké parametry pro práci programu, které může uživatel doplňovat.

Jde mi o umístění tohoto souboru a to konrétně pro OS Vista.

Chci se tedy zeptat kam je správné umístit takový soubor z hlediska přístupů k souboru (např. jeho ruční editace v Notepadu). Pokud tento soubor umístím přímo do adresáře aplikace, tak je to patrně špatně. Stačilo by vytvořit nějaký podradresář? (např. C:/Program Files/Moje Aplikace/Data/soubor.txt)

předem děkuji za odpověď

nahlásit spamnahlásit spam 0 odpovědětodpovědět

http://msdn.microsoft.com/en-us/library/... s parametrem Environment.SpecialFolder.ApplicationData (viz http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Do Program Files nikdy neukládejte data, která mohou být změněna uživatelem, nebo programem samotným. K tomu slouží následující složky (konstanty pro GetFolderPath):

ApplicationData: Úložiště pro data aplikace v cestovním profilu uživatele.

CommonApplicationData: Úložiště pro data aplikace společné pro všechny uživatele.

LocalApplicationData: Úložiště pro data aplikace v místním profilu uživatele.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

a kam nejlepší má program ukládat txt soubory aniž by uživatel zadával cestu a ten program by měl fungovat hromadě uživatelů (kromě té složky ze ktere byl program spuštěn)

existuje nějaké také místo ?? nepočítám li že někdo si změní méno svazku C: na x:

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už vám to tady naznačoval kolega Čermák, tak pokud jste to nepochopil, tak metoda GetFolderPath(Environment.SpecialFolder.CommonApplicationData) vám vrátí příslušnou cestu. Cesta je systémová proměnná do složky společné pro všechny uživatele, takže je zaručeno že bude vždy platná. Úplnou cestu k souboru vytvoříte sloučením výše uvedené složky a názvu souboru pomocí metody IO.Path.Combine

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě bych se zeptal, proč je nevhodné použít umístění zmíněného souboru např. do nějakého adresáře přímo v aplikaci třeba takto:

...aplikace/Data Aplikace/soubor.txt

pokud v programu používám skládání cesty z AppPath + adresář atd. ? Potom přeci vůbec nezáleží kam je aplikace nainstalována a vždy to adresování bude fungovat správně.

Přijde mi to daleko přehlednější.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jde o to, že cestu do aplikace nesmíte nikdy napsat natvrdo. Výše jmenované funkce vám vrátí cestu, ať už si kdokoliv dělal se systémem, s mapováním písmenek atd. cokoliv, bude to fungovat na každém systému a je to správné a univerzální řešení. Natvrdo do aplikací píšou cesty jen začátečníci anebo prasátka.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

... a pak ještě já... Protože svoje aplikace nikomu nedávám...

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

asi sem to prasátko :)

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

Dobrý den,

proto že nikomu své aplikace nedáváte neznaméná, že to máte napsat jako prase.Měl by jste si zvyknout psát relativní cesty a ne ty absolutní(uvidíte, že je to lepší).Sem zvědav jak se Vám bude libít až si smažete ten soubor, ke kterému odkazujete absolutní adresou (o jiném PC ani němluvě).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

(dotaz se umístil (patrně má chyba) doprostřed diskuze a tak jej raději přidám ještě na konec)

Ještě bych se zeptal, proč je nevhodné použít umístění zmíněného souboru např. do nějakého adresáře přímo v aplikaci třeba takto:

...aplikace/Data Aplikace/soubor.txt

pokud v programu používám skládání cesty z AppPath + adresář atd. ? Potom přeci vůbec nezáleží kam je aplikace nainstalována a vždy to adresování bude fungovat správně.

Přijde mi to daleko přehlednější.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Potíž je v tom, že když je aplikace ve složce Program Files, tak by do ní neměla ukládat žádná data. Taková data by byla sdílená pro všechny uživatele na počítači (to, že vy máte na počítači jen jeden účet, neznamená, že ostatní jich nemají víc).

Navíc v korporátním prostředí se používají třeba roaming profily, což znamená, že složka profilu uživatele leží někde na serveru a když se uživatel přihlásí kdekoliv, tak se mu zpřístupní jako uživatelský profil, takže si data a nastavení aplikací tahá s sebou.

Pokud použijete výše uvedené funkce, tak to taky bude fungovat úplně všude, a navíc to bude správně. Zápis do Program Files nebo do složky aplikace se používal v dobách Windows 98 a není to zkrátka vhodné řešení. Do Program Files nemá co kdo zapisovat, pokud nejde o instalátor, navíc se tím i dost dramaticky omezuje možnost šíření virů a různých podobnch hajzlsoftů - když nemůžou psát do Program Files, tak nemůžou napadat EXE soubory a šířit se pomocí nich dál.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji Vám za takto podrobné vysvětlení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback