Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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
matesax
Tvůrce
Avatar
matesax:5.5.2012 9:28

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
Tvůrce
Avatar
Odpovídá na matesax
matesax:5.5.2012 9:30

nastaví

 
Nahoru Odpovědět
5.5.2012 9:30
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:5.5.2012 9:33

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
You are the greatest project you will ever work on.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:5.5.2012 9:36

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
 
Nahoru Odpovědět
5.5.2012 9:38
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:5.5.2012 10:08

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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:5.5.2012 10:41

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
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:5.5.2012 10:42

Mám to dát do try bloku?

 
Nahoru Odpovědět
5.5.2012 10:42
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:5.5.2012 10:44

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
You are the greatest project you will ever work on.
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:24.7.2012 12:31

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
Neaktivní uživatelský účet
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:24.7.2012 12:46

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
Tvůrce
Avatar
Odpovídá na matesax
matesax:24.7.2012 12:47

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
Tvůrce
Avatar
Odpovídá na matesax
matesax:24.7.2012 12:48

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 Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:24.7.2012 13:03

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
You are the greatest project you will ever work on.
Avatar
Nahoru Odpovědět
24.7.2012 13:07
Neaktivní uživatelský účet
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.