Ukládání dat   zodpovězená otázka

VB.NET

Vytvořil jsem si správce hesel. Ukládání, mazání upravy atd jsem udělal na styl - http://www.vbnet.cz/clanek--33-vb_net_od... a 9. dílu. Problém je že já mám v listview 3 položky čistý text z textboxů, ale jak si to aplikace uloží při nahrání se to už nenahraje.

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

Je jasné , že máte něco špatně(mám i tip co).Kód by nebyl ?

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

Nastavil jste pro soubor, do kterého ukládíte, vlastnost "Copy To Output Directory" na "Copy If Newer"?

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

Ukládání

Dim soubor As New IO.StreamWriter("databaze.txt")           'otevřít soubor
        For i As Integer = 0 To ListView1.Items.Count - 1           'projít všechny položky seznamu
            soubor.WriteLine(ListView1.Items(i).SubItems(0).Text)   'zapsat datum
            soubor.WriteLine(ListView1.Items(i).SubItems(1).Text)   'zapsat částku
            soubor.WriteLine(ListView1.Items(i).SubItems(2).Text)   'zapsat popis
        Next
        soubor.Close()

Nahrání ze souboru:

 Dim soubor As New IO.StreamReader("databaze.txt")       'otevřít soubor
        While Not soubor.EndOfStream        'číst, dokud nejsme na konci souboru
            Dim datum As String = soubor.ReadLine()   'načíst první řádek z trojice - datum
            Dim castka As String = soubor.ReadLine()      'načíst druhý řádek z trojice - částka
            Dim text As String = soubor.ReadLine()          'načíst třetí řádek z trojice - popis transakce
        End While
        soubor.Close()
     
nahlásit spamnahlásit spam 0 odpovědětodpovědět

chyba je v tom, že jste při opětovném načtení dat ze souboru načetl data pouze do proměnných a né do komponenty ListView.

Před End While vložte:

 
'přidat položku do seznamu
Dim polozka As New ListViewItem() 'vytvořit novou položku seznamu
If castka < 0 Then polozka.ForeColor = Color.Red    'pokud je částka menší než nula, obarvit položku červeně
polozka.Text = datum  'vypsat datum
polozka.SubItems.Add(castka) 'přidat druhý sloupeček s částkou
polozka.SubItems.Add(text)   'přidat třetí sloupeček s popisem
ListView1.Items.Add(polozka) 'přidat položku do seznamu

seriál k tomu je na: http://www.vbnet.cz/clanek--33-vb_net_od...

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

Nahrání souboru zpět do ListView:

 Dim soubor As New IO.StreamReader("databaze.txt")       'otevřít soubor
        While Not soubor.EndOfStream        'číst, dokud nejsme na konci souboru
            Dim datum As String = soubor.ReadLine()   'načíst první řádek z trojice - datum
            Dim castka As String = soubor.ReadLine()      'načíst druhý řádek z trojice - částka
            Dim text As String = soubor.ReadLine()          'načíst třetí řádek z trojice - popis transakce
Dim polozka As New ListViewItem() 'vytvořit novou položku seznamu
If castka < 0 Then polozka.ForeColor = Color.Red    'pokud je částka menší než nula, obarvit položku červeně
polozka.Text = datum  'vypsat datum
polozka.SubItems.Add(castka) 'přidat druhý sloupeček s částkou
polozka.SubItems.Add(text)   'přidat třetí sloupeček s popisem
ListView1.Items.Add(polozka) 'přidat položku do seznamu
End While
        soubor.Close()


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

tu část

If castka < 0 Then polozka.ForeColor = Color.Red 'pokud je částka menší než nula, obarvit položku červeně

pro vaše účely je zbytečná. Můžete jí vynechat :)

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

Správce hesel...? Pokud to berete jako příklad na kterém se chcete naučit ukládání a čtení souboru, tak to beru, to je v pořádku. Ale pokud budete chtít tenhle program dokonce používat... no to bych silně nedoporučoval. Správce hesel se musí umět dostat ke skutečné podobě hesla, tzn. že hesla musíte ukládat v nějakém tvaru, ze kterého je zase dokážete zpětně přečíst. Neznamená to ale, že je budete ukládat jako prostý text. To je dost velká zhovadilost, je to asi taková machrovinka, jako používat všude jedno heslo, nejlépe svoje příjmení.

Takže pokud by jste chtěl ochránit svoje data aspoň před běžnými uživateli, musíte omezit přístup k vaší aplikaci a ukládat hesla v nečitelném formátu. Asi nejjednodušší způsob by bylo zachovat ukládání do txt souboru, ale neukládat hodnoty přímo z ListView a před uložením je prohnat nějakým šifrovacím algoritmem.

Omlouvám se za svoje výlevy, ale musel jsem na to upozornit. Až příliš často se setkávám s lidmi, kteří jsou na svoje hesla a všeobecně na svoje osobní údaje, velmi neopatrní. Dokud jejich data někdo nezneužije, myslí si že jich se to netýká...

PS: Předpokládám, že jste úplný začátečník, tak Vám přeji mnoho úspěchů ve Vašem snažení. Ještě si dovolím připojit jeden tip: Pro ukládání hodnot z ListView je vhodnější XML soubor. Umožní Vám jednoduše ukládat mnoho nesourodých věcí do jednoho souboru.

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

Zdravím.

Nemyslím si, že by byl velký rozdíl mezi ukládání do formátu TXT a XML. Stejně při naházení dat do komponenty ListView se vše změní na text ( nepočítám Checkbox popřípadě ikonu ).

Hodně komerčních programů používá TXT soubory pro dočasné ukládání hodnot.

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

Tady jde spíš o to že pokud si dobře navrhnete strukturu XML, vyhledává se v něm lépe než v txt souboru. Spíš to ale bude vždy záležet na konkrétním použití.

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

Souhlas.

Myslím si ale, že na 6 řádků textu nemá smyls ukládat do XML.

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

Ehm, no, tak já jsem si to udělal jen tak pro sebe :). Protože tady na kompu je pouze fotřík a někdy i máma, a ty co mám za hesla pátrat nepotřebujou :). Ale i to naučení v tom je :)

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

Ano, pochopil jste to správně. Tato diskuse mnohokrát pomohla i mě, když jsem narazil na něco s čím jsem si nevěděl rady a potřeboval sem se poradit s ostatníma.

nahlásit spamnahlásit spam 1 / 1 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