Favicon Svethardware.cz  Svět hardware   Fórum Favicon Svetaudia.cz  Svět audia Favicon TVFreak.cz  TV Freak   Fórum Favicon Digimanie.cz  Digimanie   Fórum   Galerie Společnost oXy Online s.r.o.
Zobrazené výsledky: 1 až 14 z 14

Téma: C# - Program na databázování známek - problém s kódem

  1. #1
    Nováček
    Registrace
    Oct 2006
    Příspěvků
    5

    Zdravím všechny programátory i neprogramátory
    Před nedávnem jsem začal programovat v MSVS2005, pokoušeje se udělat nějakou aplikaci pro svoje PDA. Jako první projekt jsem si vybral program na správu školních známek (podobný program jsem viděl pro Symbian, pro PPC jsem nic podobného nenašel). V C# nijak skvěle neumím, pomocí help database a googlu se mi ale zatím vždy povedlo najít (a naučit se) to co jsem potřeboval. Zásadním problémem pro mě ale zřejmě bude práce se soubory. Kromě toho že se mi ve VS nepovedlo úspěšně zadat jinou cestu než jen "jmenosouboru.xxx", mám zásadní problém se zápisem do souboru a následným čtením. Následující kód sice funguje v pořádku:

    Kód:
    string path = @"MyFile.txt";
            {
               using (StreamWriter sw = File.CreateText(path)) 
                {
                    sw.WriteLine("blabla");
                    sw.WriteLine("blablabla");
                 }    
            }
    
            using (StreamReader sr = File.OpenText(path)) 
            {
                string txt = "";
                while ((txt = sr.ReadLine()) != null) 
                {
                    textBox2.Text = (textBox2.Text + "\r\n" + (s));
                }
            }
    když ale StreamWriter a StreamReader použiji v mém programu, StreamReader nic nepřečte. Projekt jsem uploadnul na

    http://www.megaupload.com/?d=0I84SUKA

    a kdyby se našel někdo kdo by byl ochotný si to přečíst a zkusit zjistit v čem je problém, byl bych mu moc vděčný. Doufám že pochopíte, o co se v programu snažím
    Předem díky za jakoukoliv pomoc.
    Odpovídat lze po přihlášení

  2. #2
    Obyvatel SMob
    Registrace
    Sep 2005
    Příspěvků
    485

    Nemám teď čas se na ten zdroják dívat, ale obecně to asi máte dobře. Na PDA s CF jsem měl akorát problém s cestou, kdy bez uvedení aplikačního adresáře to bylo buď v rootu, nebo dokonce nešlo zapisovat/číst, takže používám kompletní cestu k souboru a ne jen název/relativní cestu:

    Kód:
    string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\data.txt";
    
    // zapis
    StreamWriter sw = File.CreateText(path);
    sw.WriteLine("blabla");
    sw.Flush();
    sw.Close();
    
    // cteni (tahle komplikovanejsi konstrukce funguje i na CF 1.0)
    StreamReader sr = File.OpenText(path);
    string line;
    do
    {
      line = sr.ReadLine();
    } while (sr.Peek() != -1);
    sr.Close();
    Odpovídat lze po přihlášení



  3. #3
    Nováček
    Registrace
    Oct 2006
    Příspěvků
    5

    Díky moc, hodně mi to pomohlo..teď už aspoň vím kam se soubory ukládají tak můžu zjistit jestli problém vzniká při čtení nebo zápisu.. trochu jsem si s programem dál hrál a povedlo se mi úspěšně zapsat známku do souboru, problém je v tom že ta další před tím, než se zapíše, celý soubor přemaže. V rámci jedné instance using (StreamWriter ...) vše funguje v pořádku, třeba:

    Kód:
    using (StreamWriter sw = new StreamWriter(path))
                {
                    sw.WriteLine("text1");  
                    sw.WriteLine("text2");
                }
    zapíše jak "text1" tak "text2". Když ale zápis rozdělím do dvou částí:

    Kód:
    using (StreamWriter sw = new StreamWriter(path))
                {
                    sw.WriteLine("text1");  
                }   
    
    using (StreamWriter sw = new StreamWriter(path))
                {
                  sw.WriteLine("text2");
                }
    do souboru se zapíše jen "text2". Mohl by mi někdo poradit jak do souboru text přidat jiným způsobem než použitím instance using StreamWriter která jeho osbah zřejmě nejprve přemaže? Dík moc!
    Odpovídat lze po přihlášení

  4. #4
    Starousedlík SMob
    Registrace
    Dec 2004
    Příspěvků
    1,250

    no problé je nejspíš v tom že pokaždé znovu vytváříš stream (který jsi předtím ani neuzavřel),
    neboli někde v deklaraci použiješ
    Kód:
    StreamWriter sw = new StreamWriter(path);
    pak už v programu používáš jen
    Kód:
    sw.WriteLine("text...");
    a nakonci programu je korektní jej zavřít
    Kód:
    sw.Close();
    Odpovídat lze po přihlášení

  5. #5
    Nováček
    Registrace
    Feb 2007
    Příspěvků
    0

    Jestli ono se spíš nezapíše obojí, ovšem přes sebe ;-).
    Odpovídat lze po přihlášení

  6. #6
    Nováček
    Registrace
    Oct 2006
    Příspěvků
    5

    ElSoft: díky za radu, problém je ale v tom že stream používám při několika eventech, takže bych ho někde musel definovat globálně, což se mi nedaří..a navíc jsem někde viděl jak někdo tvrdí že v C# globální deklarace vůbec neexistuje (což se mi trochu nezdá) a že se jí nejvíce blíží DefineGolbalVariable, který ale stejně nejde použít pro Type. Jinak i když bych ho definoval globálně, pokaždé měním adresu souboru a to neumím jinak než přes
    Kód:
     StreamWriter sw = new StreamWriter(novacesta)
    Opravdu v C# není nějaký příkaz, který by umožňoval jen otevřít soubor a něco na jeho konec připsat? Nešel by použít třeba Stream.Seek? (EDIT: ne, nešel, stejně bych ho musel použít až po vytvoření nového streamu tj. až po přepsání obsahu souboru) Jinak dík moc za trpělivost kterou se mnou máte

    Johny_G: nn, nezapíše se to přes sebe, ale "new StreamWriter" fakt celý soubor přepíše..zkoušel sem to na několikařádkovém soubory a místo aby se přepsal jen první (případně poslední) řádek, přepsal se celý soubor
    Odpovídat lze po přihlášení

  7. #7
    Nováček
    Registrace
    Feb 2007
    Příspěvků
    0

    Citace Původně odesláno od Longlife
    Johny_G: nn, nezapíše se to přes sebe, ale "new StreamWriter" fakt celý soubor přepíše..zkoušel sem to na několikařádkovém soubory a místo aby se přepsal jen první (případně poslední) řádek, přepsal se celý soubor
    No takhle jsem to myslel, jen jsem to blbě napsal. A sorry že ti nepomůžu s problémem, já zatím používal streamwriter jen pro ukládání nastavení a tam byl přepis vysoce žádoucí :-).
    Odpovídat lze po přihlášení



  8. #8
    Obyvatel SMob
    Registrace
    Sep 2005
    Příspěvků
    485

    Jedna z variant konstruktoru by měla být tahle
    Kód:
    public StreamWriter(
       string path,
       bool append
    );
    Odpovídat lze po přihlášení

  9. #9
    Starousedlík SMob
    Registrace
    Dec 2004
    Příspěvků
    1,250

    a proč tedy nepoužít FileStream
    Odpovídat lze po přihlášení

  10. #10
    Nováček
    Registrace
    Oct 2006
    Příspěvků
    5

    Díky, vypadá to že FileStream problém vyřeší. Mám jen jednu (snad už poslední ) otázku: když použiji
    Kód:
    fs.Write(text, 0, text.Length);
    program začne zapisovat na začátek souboru a přemaže tak první už zapsané řádek. Jak můžu psát na konec souboru? Zkoušel jsem měnit hodnotu integeru offset, ale při jakékoliv jíné než 0 program spadl. Také jsem zkoušel nejdřív změnit pozici v Streamu pomocí SeekOrigin ale nedá se říct že bych nějak moc chápal jak se používá Ještě jednou dík moc za odpověď(i) =)
    Odpovídat lze po přihlášení

  11. #11
    Starousedlík SMob
    Registrace
    Dec 2004
    Příspěvků
    1,250

    osobně bych to řešil asi takto,
    při zapnutí programu bych si soubor přesypal do nějaké dynamické struktury, stou pracoval a na konci bych vše zas zapsal do souboru

    jinak k tvému problému, nešlo by k nastavení pozice použít toto:
    Kód:
    fs.Position = fs.Length;
    Odpovídat lze po přihlášení

  12. #12
    Nováček
    Registrace
    Oct 2006
    Příspěvků
    5

    Funguje to Hrozně moc díky za pomoc, miluju pocit když program konečně funguje (aspoň trochu) tak jak má Teď už zbývá jen pár drobností a až program bude hotový, určitě sem hodím link, snad se to bude hodit i někomu jinému než jen mě
    Odpovídat lze po přihlášení



  13. #13
    Obyvatel SMob
    Registrace
    Sep 2005
    Příspěvků
    485

    Longlife:
    Ještě před radou ElSofta s FileStreamem jsem přece psal, že jedna z variant StreamWriteru přímo nabízí Append, kde stačí dát true, tak proč jste si komplikoval život? :sarcastic:
    Odpovídat lze po přihlášení

  14. #14
    Občasný diskutér
    Registrace
    Jan 2007
    Příspěvků
    49

    No koukám, že jste to nakonec vyřešili, ale koncepčně to není nejlepší. Neřeší to konkurenční přístupy a pod. Když budeš chtít, napiš SZ a hodím ti do mailu nějaké ukázky na práci se soubory.
    Odpovídat lze po přihlášení

Podobná témata

  1. Zamykání telefonu s kódem ( Phone lock )
    Od batthead_ce4you v sekci HD2
    Reakcí: 4
    Poslední příspěvek: 02-11-2010, 21:40
  2. Reakcí: 5
    Poslední příspěvek: 24-12-2007, 14:22
  3. Zamčení PDA číselným kódem
    Od JKL_KOLDA v sekci Programy pro Pocket PC
    Reakcí: 6
    Poslední příspěvek: 28-08-2007, 12:16
  4. program
    Od Jindřich Procházka v sekci Programování
    Reakcí: 4
    Poslední příspěvek: 03-08-2006, 20:19
  5. Existuje školní organizér známek?
    Od v sekci Programy pro Pocket PC
    Reakcí: 11
    Poslední příspěvek: 08-02-2005, 21:46