Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem c# IO (Streamwriter - připisování do souboru)

Zdravím, potřeboval bych v C# dořešit v jednoduché databázi ukládání do textového souboru pomocí StreamWriter. Do souboru zapisuji pomocí cyklu pole. Potřebuji, aby se při přidání dalšího prvku nezapsaly do souboru prvky, které již v souboru jsou. Napadá mě, že by šlo upravit v cyklu int i - aby se pokračovalo od posledního prvku v souboru.

using (StreamWriter sw = new StreamWriter(@"databaze.txt"))
            {
                for (int i = 0; i < (pole.Length - pocetSmazanych); i++)
                {
                    sw.Write(i + " " + pole[i][0] + ";" + pole[i][1] + ";" + pole[i][2]);

                }
                
            }

vím, že se při připisování do souboru přidá za název souboru true :

using (StreamWriter sw = new StreamWriter(@"databaze.txt", true))

ale potřebuji, jak jsem již zmínil zapsat pouze ty prvky, které ještě v souboru nejsou.

Děkuji za rady.

Předmět Autor Datum
Nebude jednodušší celý ten soubor prostě vždy zapisovat celý? Pokud to není nějaký obří soubor, tak…
Wikan 27.08.2016 09:09
Wikan
Asi to bude lepší - obří není. Mohl bych tě poprosit o ppříklad kodu jak by to mělo vypadat, aby se…
Petr.Pa 27.08.2016 11:28
Petr.Pa
Načteš si obsah toho souboru, porovnáš v aktuálními prvky, uložíš jenom nové.
Wikan 27.08.2016 11:32
Wikan
Nemůžeš pls alespoň kousek toho kódu? - tohle dělám poprvé.
Petr.Pa 27.08.2016 11:36
Petr.Pa
Kousek kódu čeho konkrétně?
Wikan 27.08.2016 11:42
Wikan
No nejlépe celý, ale hlavně mi jde o to porovnávání a následné uložení. Díky
Petr.Pa 27.08.2016 11:44
Petr.Pa
Tak celý ti to určitě psát nebudu. Napiš, co konkrétně nevíš a můžeme pokračovat. nový
Wikan 27.08.2016 11:45
Wikan
Porovnávání a následné uložení do souboru. A jdou v C# indexovat řádky jako v Basicu? nový
Petr.Pa 27.08.2016 11:46
Petr.Pa
To není moc konkrétní, to jsi v podstatě napsal to, co jsem ti napsal já. Čemu konkrétně říkáš index… nový
Wikan 27.08.2016 11:48
Wikan
Nevim jak ti to mam napsat konkrétněji - prostě potřebuji zajistit to , aby se do souboru zapisovaly… nový
Petr.Pa 27.08.2016 11:54
Petr.Pa
Tak třeba: 1. načteš jednotlivé řádky do pole pomocí File.ReadAllLines. 2. z jednotlivých řádků si v… nový
Wikan 27.08.2016 12:02
Wikan
Tak to zkouším, ale nevím jak dál: 1: string[] nacteneRadky = File.ReadAllLines(@"databaze.txt");… nový
Petr.Pa 27.08.2016 13:39
Petr.Pa
Druhý rozměr z toho uděláš tím druhým krokem. nový
Wikan 27.08.2016 13:47
Wikan
Můžeš mi to prosím napsat jako kód v C#? nový
Petr.Pa 27.08.2016 14:13
Petr.Pa
Vidím, že vlastní snaha už dneska lidem moc neříká. var values = new string[lines.Length][]; var sp… poslední
Wikan 27.08.2016 14:32
Wikan

Nevim jak ti to mam napsat konkrétněji - prostě potřebuji zajistit to , aby se do souboru zapisovaly jen ty prvky, které tam ještě nejsou.
Funguje mi ukládání buď tak, že se celý soubor při uložení přepíše (tím pádem zmizí data, které v něm byla dříve) a nebo takto:

using (StreamWriter sw = new StreamWriter(@"databaze.txt", true))

kdy se mi sice do souboru prvky přidají, ale všechny (ne jen ty, které tam nebyly)

Takže potřebuji zajistit aby se do souboru zapisovaly jen ty prvky, které tam ještě nejsou.

Za indexaci řádků jsem považoval možnost uložit data na konkrétní číslo řádku jako v Basicu.

Tak třeba:
1. načteš jednotlivé řádky do pole pomocí File.ReadAllLines.
2. z jednotlivých řádků si vytvoříš stejnou strukturu, jako jsi měl před tím (pole[][]), např. pomocí string.Split
3. porovnáš takto získanou strukturu se stávající. Buď pomocí dvou vnořených cyklů, nebo pokud tam bud nějaký identifikátor, tak pomocí Hashsetu
4. Co ve stávajícím poli přebývá, to připíšeš do souboru.

Tak to zkouším, ale nevím jak dál:

1:

string[] nacteneRadky = File.ReadAllLines(@"databaze.txt");

To je snad dobře, ale nevím jak dál - když mám to pole dvourozměrné.
Díky i za ty odkazy na msdn, ale opravdu nevím.

Mohl bys mně prosím napsat kód v C#, jak by to mělo vypadat v mém kokrétním případě?

Děkuji moc

Vidím, že vlastní snaha už dneska lidem moc neříká.

var values = new string[lines.Length][];
var splits = new[] {' ', ';'};
for(var i = 0; i < lines.Length; i++)
{
    values[i] = new string[3];
    var fields = lines[i].Split(splits);
    for (var j = 0; j < 3; j++)
        values[i][j] = fields[j + 1];
}

Zpět do poradny Odpovědět na původní otázku Nahoru