Archief - [PROG][C#] Filestream

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

k3vin

Legacy Member
Ok, ik heb een vraagje over filestreams. Ik kan bijvoorbeeld wel dingen wegschrijven naar bestanden en terug uitlezen enzo maar nu heb ik een programma met een listview. Ook heb ik hierop een uitbreiding gemaakt dat je hieraan items kan toevoegen, nu wil ik die toegevoegde items ook wegschrijven zodat als ik het programma opnieuw open deze items er nog tussenstaan. Ik heb al een paar dingen geprobeerd maar geen enkele werkt. Iemand hier een ideetje voor?

Destiser

Legacy Member
Speel eens met Streamwriter en Streamreader ipv filestream, heb ik persoonlijk de voorkeur aan (als het om simpele dingen gaat)

Obliv`

Legacy Member
Stap 0: Maak een bestand dat er zo uit ziet:
guid;subItem0;subItem1;subItem2;...

Stap 1: Houd in je app.config of application settings een veld bij waarin je de locatie van het bestand in opslaat.

Stap 2: Roep in je Form_Load de procedure op die ervoor zorgt dat de listview wordt opgevuld.

Stap 3: In die procedure open je het bestand, waarvan de naam in de app.config ofzo staat. Je loopt door dit bestand mbv een streamreader. Bij elke lijn split je de gegevens op de ";". Vul een listviewitem met de gegevens uit de array die je bekomen bent na te splitten op de puntkomma.

Stap 4: Voorzie een 'add-button'. Bij het toevoegen van een nieuw listviewitem genereer je een nieuwe guid en voeg die toe als tag ofzo.

Stap 5: Voorzie een 'save-button'. Als de gebruiker hierop klikt, ga je de huidige gegevens in de listview updaten, verwijderen of toevoegen in je bestand. Aan de hand van de guid kan je zien of de listviewitem al bestaat in je bestand.

Je kan in mijn ogen best een klasse aanmaken voor elke lijn in je bestand. Het zou ook wel veel simpler zijn denk ik dat je een klein databaseje of xml-bestand hiervoor aanmaakt. Dan hoef je niet met de streamreader etc te klooien.

k3vin

Legacy Member
Destiser zei:
Speel eens met Streamwriter en Streamreader ipv filestream, heb ik persoonlijk de voorkeur aan (als het om simpele dingen gaat)

My bad, ik gebruik dus Streamwriter en reader :doh:

k3vin

Legacy Member
ik zal het hier maar weer even in posten aangezien het wss super easy is, maar ik het niet kan vinden :s. Ik ga dus ongeveer werken zoals Obliv' maar ik loop al vast bij stap 0 :p. Die guid, hoe kan ik ervoor zorgen dat die elke keer als er een nieuw item wordt toegevoegd met 1 verhoogt wordt ten opzichte van het vorige? Ik heb al een paar dingen geprobeerd maar kom er niet uit :s

Obliv`

Legacy Member
Een guid creëer je niet zelf, maar laat je genereren adhv een factory method:
Dim myGuid As Guid = Guid.NewGuid

k3vin

Legacy Member
ja maar hier wil ik eigenlijk gewoon in plaats van een guid een genummerde lijst maken. Zodat ik per item gewoon nummer 0,1,2,3,4 enz... krijg.

Obliv`

Legacy Member
k3vin zei:
ja maar hier wil ik eigenlijk gewoon in plaats van een guid een genummerde lijst maken. Zodat ik per item gewoon nummer 0,1,2,3,4 enz... krijg.

Dan kan je geen guid gebruiken. Dan neem je beter een Integer.

k3vin

Legacy Member
Obliv` zei:
Dan kan je geen guid gebruiken. Dan neem je beter een Integer.

Ja, dat deel had ik al door. Maar ik blijf vastlopen met de code om dat te schrijven... En zijn er argumenten waarom ik beter werk met zo een GUID dan met een integer?

Obliv`

Legacy Member
Als je een Integer neemt, ga je zelf de identifier van je item moeten bepalen, aangezien je niet met de autonummers van een database kunt werk. Met het mogelijke gevaar dat de Id toch al bestaat.

Bij een guid hoef je je niets van die rommel aan te trekken.

Ik zeg nu wel niet dat je absoluut een guid moet gebruiken hoor, aan dat datatype zijn ook nadelen verbonden hoor. Het zal dus eerder van je persoonlijke voorkeur afhangen.

k3vin

Legacy Member
Ok, omdat ik geen nieuw topic wil starten zal ik dit maar omhoog halen.
Het wegschrijven en lezen begint allemaal aardig te lukken maar nu ben ik de code aan het implementeren in een moeilijker programma. Voor de moment zit ik vast met een treeview. Ik lees dus uit uit een bestand met daarin bv:
categorie:merk:naam:prijs:nummer
Dit wordt gesplitst op de : , nu heb ik een treeview en daarin wil ik de categorie weergeven als node met als child node het merk enzoverder. Dit lukt allemaal, enkel als ik twee items heb met dezelfde categorie, maakt hij dit tweemaal aan.
Wat ik nu wil toevoegen is :
Code:
als (de node al bestaat) dan 
niets doen;
anders 
de node toevoegen;

Ik heb al beetje liggen experimenteren met .Constains en .Equals maar niets lijkt te werken

k3vin

Legacy Member
Niemand die iets weet? Heb nu ook al geprobeerd met een array die alle dingen inleest en als em dubbele dingen ziet haalt em die eruit maar ook daar krijg ik de code niet helemaal juist :s begin me wel beetje dom te voele :p

Krueger

Legacy Member
k3vin zei:
Ok, omdat ik geen nieuw topic wil starten zal ik dit maar omhoog halen.
Het wegschrijven en lezen begint allemaal aardig te lukken maar nu ben ik de code aan het implementeren in een moeilijker programma. Voor de moment zit ik vast met een treeview. Ik lees dus uit uit een bestand met daarin bv:
categorie:merk:naam:prijs:nummer
Dit wordt gesplitst op de : , nu heb ik een treeview en daarin wil ik de categorie weergeven als node met als child node het merk enzoverder. Dit lukt allemaal, enkel als ik twee items heb met dezelfde categorie, maakt hij dit tweemaal aan.
Wat ik nu wil toevoegen is :
Code:
als (de node al bestaat) dan 
niets doen;
anders 
de node toevoegen;

Ik heb al beetje liggen experimenteren met .Constains en .Equals maar niets lijkt te werken
Ik zou zeggen iets in de aard van een iterator over je eerste nodes (dus deze die de categorie voorstellen). Vergelijk de strings van de node met deze die je wil toevoegen.
zoiets had ik in gedachten (syntax zal wel verkeerd zijn)
Code:
bool found = false;
foreach(Node node in treeview.childnodes){
  if( String.Equals(node.name, toeTeVoegenNode.name) == true){
    node.Add( ... );
    found = true;
  }
}
if(!found){
  treeview.Add(...);
}

k3vin

Legacy Member
Ok ik denk dat ik er bijna uit ben maar nu leest hij alles letterlijk uit, uit het bestand, terwijl het dus de bedoeling is dat als artikels[x].artCat gelijk is aan items[0] hij dit niet meer doet.
De code:
Code:
try {

                StreamReader leesstream = File.OpenText(bestand);
                string leestekst;
                int i = 0;
                while ((leestekst = leesstream.ReadLine()) != null)
                {
                    char dubbelpunt = ':';
                    items = leestekst.Split(dubbelpunt);
                    artikels[i] = new artikel(items[0], items[1], items[2], long.Parse(items[3]), double.Parse(items[4]));
                   // TreeNode check = new TreeNode(items[0]);


                    bool found = false;
                    for (int x = 0; x < 100; ++x)
                    {
                        
                        if (artikels[x].artCat.Equals(items[0]))
                        {
                            found = true;
                            x = 100;
                        }

                     else  if (!found)
                    {
                        nodRoot.Nodes.Add(items[0]);
                        
                    }   
                        
                    }

                    i++;
                    
                }

                leesstream.Close();
            }

Krueger

Legacy Member
Als je de vraag herformuleerd en de volledige code post wil ik er wel eens naar kijken :)

k3vin

Legacy Member
Problem solved, dus van mij mag deze op slot :)

Tnx for the help Krueger!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan