IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:29.9.2012 9:24

Potřeboval bych poradit se zapisováním, normální zápis do souboru nedělá problém

File.WriteAllLines(Extensions.GetAppDir + "\\Settings.ini", default_settings);

ale má to podmínku, pokud ten soubor na začátku spuštění souboru teprve vytvořím až do ukončení do něj nelze zapisovat, zapisovat do něj mohu až při příštím spuštění programu, pokud někdo víte v čem je háček, byl bych vděčný za případnou odpověď

Odpovědět
29.9.2012 9:24
Mo8ilε 15 Ѐλđ
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Jančík:29.9.2012 10:08

Uzavíráš I/O stream? stream.Close() nebo použij using
Viz.: http://www.itnetwork.cz/…-soubory-txt

Nahoru Odpovědět
29.9.2012 10:08
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:29.9.2012 10:21

Zdá se mi to, nebo je to další INI? :)

 
Nahoru Odpovědět
29.9.2012 10:21
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:29.9.2012 10:27

Nezdá. Zapisování INI souborů do adresáře s aplikací je známý nešvar.

Nahoru Odpovědět
29.9.2012 10:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:29.9.2012 10:35

Ale proč? Nevidím důvod proč nepoužívat databázi...

 
Nahoru Odpovědět
29.9.2012 10:35
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:29.9.2012 11:00

Adresář s aplikací by měl být systémem chráněn proti zápisu, aby do něj nemohly viry. Proto by takový zápis ani neměl být možný. Data mají být v uživatelském adresáři, nejlépe v databázi. Nebo také v databázi mimo uživatelský adresář a mimo adresář s aplikací.

Tvá otázka mi nedává logiku. Jsem pro používání databází a jsem proti zápisu do adresáře, ve kterém je aplikace.

Nahoru Odpovědět
29.9.2012 11:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:29.9.2012 12:41

Netýká se to jen tohoto ini souboru, v podstatě je jedno jakou má příponu, u jakéhokoliv souboru mi to nejde do ukončení programu zapisovat

Nahoru Odpovědět
29.9.2012 12:41
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:29.9.2012 12:57

using...

using (StreamWriter sr = new StreamWriter(new FileStream(cesta, FileMode.OpenOrCreate)))
    sr.WriteLine(blabla);
Editováno 29.9.2012 12:58
 
Nahoru Odpovědět
29.9.2012 12:57
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger:29.9.2012 13:05

Co máte s těmi INI? To máte z GameMakeru, ne? Podívej se do sekce práce se soubory v C#, vše se tam řeší. Na konfiguráky se používá XML.

Nahoru Odpovědět
29.9.2012 13:05
New kid back on the block with a R.I.P
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na matesax
Theodor Johnson:29.9.2012 13:10

právě streamu jsem se chtěl vyvarovat, já potřebuji aby to obsah souboru přepsalo, ne přidávalo text

Editováno 29.9.2012 13:11
Nahoru Odpovědět
29.9.2012 13:10
Mo8ilε 15 Ѐλđ
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na David Hartinger
Theodor Johnson:29.9.2012 13:11

ini soubory mi přijdou vhodný na nastavení, je to elegantnější než zapisovat nastavení do TXT

Nahoru Odpovědět
29.9.2012 13:11
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:29.9.2012 13:14

Jekn kvůli tomu se mu vyhýbáš? :)

using (StreamWriter sr = new StreamWriter(new FileStream(cesta, FileMode.Create)))
    sr.WriteLine(blabla);

Jak těžké...

Mnohem lepší bude databáze...

Editováno 29.9.2012 13:15
 
Nahoru Odpovědět
29.9.2012 13:14
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger:29.9.2012 13:14

Pokud pracuješ pod .NETem, tak cti přístup, jaký se tam používá, tedy XML, ostatně jako ve většině jazyků.

Nahoru Odpovědět
29.9.2012 13:14
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:29.9.2012 13:14

Pokud potřebuješ data v aplikaci i zapisovat, tak se nehodí ani INI ani XML, protože musíš ručně ošetřovat ACID. Na to jsou databáze.

Nahoru Odpovědět
29.9.2012 13:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:29.9.2012 13:16

Chce to jen na konfigurák. V příslušné sekci tutoriálů je vše popsané.

Nahoru Odpovědět
29.9.2012 13:16
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:29.9.2012 13:21

Jenže on do toho konfiguráku chce z té aplikace zapisovat. A to bez dalších opatření není bez rizika. Proto je lepší databáze.

Nahoru Odpovědět
29.9.2012 13:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:29.9.2012 13:23

Jak by mohlo dojít ke kolizi? Soubor bude ve složce uživatele, jedině, že by spustil program vícekrát, ale to je také jedno, prostě by tam zůstalo nastavení poslední instance. Takhle to mají přeci všechny programy. DB je pro tyto účely zbytečně složitá.

Nahoru Odpovědět
29.9.2012 13:23
New kid back on the block with a R.I.P
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:29.9.2012 13:34

Ale v podstatě se nejedná o typ souboru, ani jak do něj zapisovat, ten soubor je po vytvoření nepřístupný

Nahoru Odpovědět
29.9.2012 13:34
Mo8ilε 15 Ѐλđ
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:29.9.2012 13:35

Mám už takovou zkušenost. Jak se nějaký program rozšíří, hned ho někdo vrzne na serverový disk. A průšvih je na světě. Pokud je ten adresář chráněn proti zápisu, přestane to fungovat.

Pokud chceš zapisovat do konfiguráku aplikace, tak ten konfigurák musí být v uživatelském prostoru, aby se do něj dalo zapsat.

INI je také DB, ale pro práci s ním se musí použít DB vrstva, která je docela tenká. Jinak se jako DB nechová.

Nahoru Odpovědět
29.9.2012 13:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger:29.9.2012 13:36

Četl jsi ty tutoriály, třeba ohledně oprávnění UAC? Řešíš tu něco, co je tu vysvětleno, přečti si to.

Editováno 29.9.2012 13:37
Nahoru Odpovědět
29.9.2012 13:36
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:29.9.2012 13:37

Ve Windows naštěstí jinam psát nejde, čili toho bych se nebál.

Nahoru Odpovědět
29.9.2012 13:37
New kid back on the block with a R.I.P
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na David Hartinger
Theodor Johnson:29.9.2012 13:44

Kouknul jsem na to, ale nic co by vysvětlovalo můj problém
code:

private void CheckFileExist()
{
    if (!File.Exists(Extensions.GetAppDir + "\\Settings.ini"))
        {
        File.Create(Extensions.GetAppDir + "\\Settings.ini");
        File.WriteAllLines(Extensions.GetAppDir + "\\Settings.ini", defaultSettings);
//V tom File.WriteAllLines mi to při spuštění funkce napíše že do souboru nelze zapisovat
        }
}
Nahoru Odpovědět
29.9.2012 13:44
Mo8ilε 15 Ѐλđ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger:29.9.2012 13:45

Co je v GetAppDir?

Již jsem ti psal, abys INI nepoužíval, nedělá se to.

Nahoru Odpovědět
29.9.2012 13:45
New kid back on the block with a R.I.P
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na David Hartinger
Theodor Johnson:29.9.2012 13:47
GetAppDir
{
    FileInfo fi = new FileInfo(Application.ExecutablePath);
    return fi.DirectoryName;
}
Nahoru Odpovědět
29.9.2012 13:47
Mo8ilε 15 Ѐλđ
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na David Hartinger
Theodor Johnson:29.9.2012 13:48

taky jsem zkoušel soubory mppl, sett, txt, ale ten samý problém

Nahoru Odpovědět
29.9.2012 13:48
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:29.9.2012 13:48

Proč? Proč mě neposlechneš? :)

using (StreamWriter sr = new StreamWriter(new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\jméno souboru", FileMode.Create)))
    sr.WriteLine(blabla);
 
Nahoru Odpovědět
29.9.2012 13:48
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger:29.9.2012 13:48

Evidentně jsi nečetl vůbec nic.

  1. Přečti si tutoriály.
  2. Piš do uživatelské složky.
  3. Použij XML.
Nahoru Odpovědět
29.9.2012 13:48
New kid back on the block with a R.I.P
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na matesax
Theodor Johnson:29.9.2012 13:50

Protože už mám kód přes 1000 řádků a je tam hodně toho závislýho na Listu který se načte přes File.ReadAllLines

Nahoru Odpovědět
29.9.2012 13:50
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:29.9.2012 13:51

Tak to je špatně!... Soubor se má načíst jen jednou a uložit jen jednou - při spuštění přečíst, při ukončení uložit...

 
Nahoru Odpovědět
29.9.2012 13:51
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:29.9.2012 13:58

Ten tvůj přístup je také špatně. Data se mají na disk zapsat už v okamžiku, kdy vzniknou, aby se nemuselo řešit např. ukládání po 10 minutách. Daleko jednodušší je zapisovat průběžně. Také je to mnohem spolehlivější a je možné, aby takto komunikovalo více procesů mezi sebou.

Nahoru Odpovědět
29.9.2012 13:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:29.9.2012 14:05

Někdy stačí dát zápis jen na OK tlačítko nějakého dialogu s nastavením. Pokud je aplikace jednoduchá, tak i na to ukončení, pořád vítězí že volání uložení je jen jednou nad tím, že program může něco málo zapomenout.

Pokud je aplikace složitá a nastavení je hodně, zpravidla použijeme databinding a databázi (to jsi měl asi na mysli), ale to předimenzováváme původní dotaz v tomto vláknu.

Nahoru Odpovědět
29.9.2012 14:05
New kid back on the block with a R.I.P
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:29.9.2012 16:14

Zkoušel jsem to přepsat na ten StreamWriter, ale soubor mi to nezpřístupnilo, ten StreamWriter nic nezapsal a při ukončování, a zápisu současného nastavení mi to hlásilo že do souboru nelze zapisovat.

Nahoru Odpovědět
29.9.2012 16:14
Mo8ilε 15 Ѐλđ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger:29.9.2012 16:23

A zapisuješ již do složky v AppData, jak je tu ukázáno?

Nahoru Odpovědět
29.9.2012 16:23
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:29.9.2012 16:37

No protože je jen ke čtení! To jsis udělal sám... Smaž jej - a nech vytvořit StreamReaderem/Stre­amWriterem - s tím pak půjde pracovat...

 
Nahoru Odpovědět
29.9.2012 16:37
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na matesax
Theodor Johnson:29.9.2012 16:45

Právě to zkoušim pokáždé, smažu, vytvoří to ale nezapíše

Nahoru Odpovědět
29.9.2012 16:45
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:29.9.2012 16:52

Pošli mi, co tam máš... (U proměnných obsah.)

 
Nahoru Odpovědět
29.9.2012 16:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 36 zpráv z 36.