Diskuze: Uložení dat

C# .NET .NET (C# a Visual Basic) Uložení dat American English version English version

Avatar
matesax
Redaktor
Avatar
matesax:

Dobrý den,
mám drobný problém. Vytvořil jsem možnost uložit tak, že se mi do textového souboru uloží jedna proměnná. Po spuštění se soubor přečte a pokud není prázdný, tak se nastavý ta proměnná na uloženou hodnotu. Potřebuji ale ještě uložit pozice 4 tlačítek a vytvářet kvůli tomu další 4 soubory mi přijde jako hloupost. Zkusil jsem zapsat na další řádky toho notepadu pozice těch tlačítek a za každé z nich jsem dal nějaký znak. No a pokud na ně Read() narazí, zapíše dosud načtené znaky s nahrazením tohoto znaku a string s dosud načtenými znaky vymaže. To mi ale nefungovalo. Tak se chci zeptat na nějaké elegantnější řešení. Děkuji.
Abyste věděli, na čem jste:
Čtení:

if (k == 0)
           {
               FileStream fs = new FileStream("vyvoj.txt", FileMode.OpenOrCreate);
               StreamReader tr = new StreamReader(fs);
               string slovo = "";
               int pismeno;
               horizontal = this.zivoty.Size.Width;

               while (tr.Peek() != -1)
               {
                   while (tr.Peek() != -1)
                   {
                       pismeno = tr.Read();
                       slovo += (char)pismeno;
                   }
                   skore.Text = slovo;
                   slovo = "";
               }
               fs.Close();

               if (skore.Text != "")
               {
                   vyvoj = int.Parse(skore.Text);
                   stesti.Size = new Size(this.stesti.Size.Width + 1, this.stesti.Size.Height);
               }
               k++;
           }

Zápis:

FileStream fs = new FileStream("vyvoj.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
           StreamWriter sw = new StreamWriter(fs);
           sw.WriteLine((vyvoj + 1).ToString());
           sw.Close();
           fs.Close();
 
Odpovědět 5.5.2012 9:28
Avatar
matesax
Redaktor
Avatar
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Bože co to je? To jsi vyhrabal nějaký příšerný kód, pošlu ti kód z toho mého výtahu.

Nahoru Odpovědět 5.5.2012 9:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Zápis:

using (StreamWriter sw = new StreamWriter(@"soubor.txt"))
{
  sw.WriteLine("Text"); // takhle zapiš řádky
  sw.Flush();
}

Jinak using bloky jsou zkráceným zápisem try a finally, které se postarají o to, aby se soubor vždy uzavřel.

Čtení jednotlivých řádek (řádka je vždy v proměnné s):

using (StreamReader sr = new StreamReader(@"soubor.txt"))
{
  string s;
  while ((s = sr.ReadLine()) != null)
  {
    ...
  }
}
Nahoru Odpovědět 5.5.2012 9:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

Udělal jsem si z toho for - abych mohl řádky očíslovat a kupodivu to pracuje přímo blahosklonně! :)

 
Nahoru Odpovědět 5.5.2012 10:08
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Jo, to půjde, jen si musíš být jistý kolik tam máš řádek, ale max. to vyhodí exception.

Nahoru Odpovědět 5.5.2012 10:41
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

Mám to dát do try bloku?

 
Nahoru Odpovědět 5.5.2012 10:42
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:

Já to dělal tak, že jsem tohle dal do metody s tím using a tu jsem pak volal v try bloku. Výjimka se potom propaguje z té metody nahoru.

Nahoru Odpovědět 5.5.2012 10:44
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Daniel Vítek:

kam to mám dát ? dávám to tam na začátek jak jsou ostatní usingy a červená mi to

 
Nahoru Odpovědět 24.7.2012 12:31
Avatar
matesax
Redaktor
Avatar
Odpovídá na Daniel Vítek
matesax:

A jeje - dej tdo metody...

třeba:

 private void SaveFile()
{
using (StreamWriter sw = new StreamWriter(@"soubor.txt"))
{
  sw.WriteLine("Text"); // takhle zapiš řádky
  sw.Flush();
}
}
 
Nahoru Odpovědět 24.7.2012 12:46
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

nebo jen:

 private void SaveFile()
{
using (@"soubor.txt")
{
  sw.WriteLine("Text"); // takhle zapiš řádky
  sw.Flush();
}
}
 
Nahoru Odpovědět 24.7.2012 12:47
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Pardon:

Nebo:

 private void SaveFile()
{
using (StreamWriter sw = new StreamWriter(new FileStream(@"soubor.txt")))
{
  sw.WriteLine("Text"); // takhle zapiš řádky
  sw.Flush();
}
}
 
Nahoru Odpovědět 24.7.2012 12:48
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
David Čápka:

Matesax: To jsi mu tedy pomohl, teď je chudák ještě zmatenější :D

Dan: Do using nahoru musíš dát System.IO.

Na otázku "kam to mám dát" začínám být alergický. Dáš to tam, kde se to má vykonat. Uložení dáš logicky tedy tam, kde uživatel zadává jméno, načtení tam, kde program začíná.

Abych nemusel opět odpovídat na zbytečné dotazy, upravím ti kód pro tvou potřebu:

Uložení jména:

using (StreamWriter sw = new StreamWriter(@"soubor.txt"))
{
  sw.WriteLine(jmeno); // v promměnné jméno je uložené jeho jméno
  sw.Flush();
}

Načtení:

string jmeno;
using (StreamReader sr = new StreamReader(@"soubor.txt"))
{
  string s;
  while ((s = sr.ReadLine()) != null)
  {
    jmeno = s;
  }
}

V načtení jsem ti nechal cyklus schválně, aby jsi to mohl později jednoduše rozšířit pro ukládání více věcí.

Nahoru Odpovědět 24.7.2012 13:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
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 15 zpráv z 15.