Entwickler-Ecke
WinForms - Inhalt einer Listbox in datei speichern?
mutterholzbein - Do 17.01.08 16:11
Titel: Inhalt einer Listbox in datei speichern?
hallo leute,
ich hab ein kleines problem. ich habe ein kleine applikation geschrieben welche mir alle möglichen systeminfos zurückliefert (netzwerk,system,anwendungsparameter,geladene assemblys,etc.) und möchte den ganzen spass nun in eine datei speichern. das speichern an und für sich funktioniert (allerdings mit openFileDialog und saveFileDialog-nicht mit stream) soweit,
aber eben nur immer eine zeile! auch wenn ich eine multiselektion einstelle.
nun also meine frage:
wie kann ich den markierten inhalt der listbox in die datei speichern/schreiben?
wäre echt genial wenn ihr mir helfen könntet!
code-ausschnitt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| private void toolStripButton1_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { pfad = saveFileDialog1.FileName; try { File.WriteAllText(pfad, listBox1.Text); } catch(Exception ex) { toolStripLabel1.Text = ex.Message.ToString(); } this.Text = pfad; } } |
danke im voraus... :)
greetz mhb
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
mutterholzbein - Do 17.01.08 17:36
Titel: ein lösungsansatz
hallo nochmal,
habe den code etwas abgeändert so das er jetzt
den gesamten inhalt der lstBx speichert:
statt,
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ... if (saveFileDialog1.ShowDialog() == DialogResult.OK) { pfad = saveFileDialog1.FileName; try { File.WriteAllText(pfad, listBox1.Text); } ... |
jetzt doch mit stream,
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| ... if(saveFileDialog1.Show.Dialog() == Dialogresult.OK) { pfad = saveFileDialog1.FileName; try { StreamWriter sw = new StreamWriter(pfad); for (int i = 0; i < this.listBox1.Items.Count; i++) sw.WriteLine(this.listBox1.Items[i].ToString()); sw.Close(); } ... |
ABER!ich brauche eine fkt die die vom user selektierten zeilen in die datei schreibt!
für weitere lösungsvorschläge bin ich sehr,sehr dankbar!
:D greetz, mhb
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Akula - Do 17.01.08 18:16
Hallo mutterholzbein,
der Letzte Qullcode war schon fast richtig, du hast nur ein Flush() vergessen. Damit werden die Daten aus dem Puffer in die Datei eingfügt und auf die Festpaltte geschrieben.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| StreamWriter sw = new StreamWriter(@"C:\test\test.txt"); for (int i = 0; i < this.listBox1.Items.Count; i++) { sw.WriteLine(this.listBox1.Items[i].ToString()); sw.Flush(); } sw.Close(); |
Hier mal der geänderte Code. Habe den Pfad dieses mal nur vorgegeben.
Gruß Akula
mutterholzbein - Do 17.01.08 18:33
Titel: rööö Akula
Akula hat folgendes geschrieben: |
Hallo mutterholzbein,
der Letzte Qullcode war schon fast richtig, du hast nur ein Flush() vergessen. Damit werden die Daten aus dem Puffer in die Datei eingfügt und auf die Festpaltte geschrieben.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| StreamWriter sw = new StreamWriter(@"C:\test\test.txt"); for (int i = 0; i < this.listBox1.Items.Count; i++) { sw.WriteLine(this.listBox1.Items[i].ToString()); sw.Flush(); } sw.Close(); |
Hier mal der geänderte Code. Habe den Pfad dieses mal nur vorgegeben.
Gruß Akula |
hoi Akula,
danke erstmal für deine mitüberlegungen!
allerdings (wie im nachtrag erwähnt) funktioniert die methode einwandfrei! ausser das er eben den kompletten inhalt der listBox speichert und nicht den der selektierten zeilen.
kann man in diesem fall nicht den Flush() des buffers weglassen da dies doch intern mit der methode Close() passieren müsste...? :wink:
aber hast du ne idee wie ich die ausgewählten zeilen in die datei schreibe?
greetz,mhb
Akula - Do 17.01.08 18:37
Wenn ich das richtig verstehe, willst du nicht die ganz Box speichern, sondern nur bestimmte Zeilen?
Akula - Do 17.01.08 18:52
Villeicht habe ich es, was du meinst, ahbe es aber nicht als Datei abgespeicht sondern ausgeben.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| int Auswahl;
Auswahl = Int32.Parse(textBox1.Text);
listBox1.Items.IndexOf(Auswahl);
if (listBox1.Items.IndexOf(Auswahl) == -1) textBox1.Text = listBox1.Items[Auswahl].ToString(); |
Bei Auswahl legt man fest, welches man auslegen will.
Gruß Akula
mutterholzbein - Do 17.01.08 19:49
Titel: rööö Akula
hmh, is ne überlegung.
hab den code so ähnlich übernommen aber noch nicht den gewünschten effekt erreicht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| ... int Select; Select = Int32.Parse(listBox1.Text); listBox1.Items.IndexOf(Select); StreamWriter sw = new StreamWriter(pfad); if (listBox1.Items.IndexOf(Select) == -1) { sw.WriteLine(listBox1.Items[Select].ToString()); sw.Flush(); } ... sw.Close(); |
habe nun das problem das er mir keine datei mehr (zum schreiben)öffnet. der dialog
erscheint zwar auch den namen kann ich eingeben nur speichern tut er nicht...
aber danke dir erstmal, istn denkanstoss.
greetz,mhb
PS.für weitere lösungsvorschläge bin ich nicht nur dankbar sondern auch und vorallem offen ;)
naja ich bastel mal noch etwas rum, falls ich so etwas erreiche lasse ich es dich wissen.
Akula - Do 17.01.08 22:27
So, habe es geschafft, dass der Code die gewünschte Zeile in die Datei schreibt, aber leider wenn man die nächste Zeile schreiben will, er die letzte überschreibt. Gibt es eine Möglichkeit, das Ende der Datei zu ermitteln?
Hier mein Versuch:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| StreamWriter sw = new StreamWriter(@"C:\test.txt"); int Auswahl;
Auswahl = Int32.Parse(textBox1.Text);
listBox1.Items.IndexOf(Auswahl);
if (listBox1.Items.IndexOf(Auswahl) == -1) { sw.WriteLine(listBox1.Items[Auswahl].ToString()); sw.Flush(); } sw.Close(); |
mutterholzbein - Fr 18.01.08 12:57
Akula hat folgendes geschrieben: |
So, habe es geschafft, dass der Code die gewünschte Zeile in die Datei schreibt, aber leider wenn man die nächste Zeile schreiben will, er die letzte überschreibt. Gibt es eine Möglichkeit, das Ende der Datei zu ermitteln?
Hier mein Versuch:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| StreamWriter sw = new StreamWriter(@"C:\test.txt"); int Auswahl;
Auswahl = Int32.Parse(textBox1.Text);
listBox1.Items.IndexOf(Auswahl);
if (listBox1.Items.IndexOf(Auswahl) == -1) { sw.WriteLine(listBox1.Items[Auswahl].ToString()); sw.Flush(); } sw.Close(); | |
hhhmmm:
| Zitat: |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| int Select; Select = Int32.Parse(listBox1.Text); listBox1.Items.IndexOf(Select); StreamWriter sw = new StreamWriter(pfad); if (listBox1.Items.IndexOf(Select) == -1) { sw.WriteLine(listBox1.Items[Select].ToString()); sw.Flush(); } ... sw.Close(); | |
gibts da einen unterschied? ;)
ausser das der bezeichner Auswahl statt Select heisst?
Akula - Fr 18.01.08 13:32
Villeicht ist es der Pfad, gib doch mal einen an. Zum testen.
Christian S. - Fr 18.01.08 14:00
Wieso macht Ihr das so kompliziert? :gruebel:
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6:
| var sfd := new SaveFileDialog; if sfd.ShowDialog = DialogResult.OK then using sw := new StreamWriter(sfd.FileName) do for o : Object in listBox1.SelectedItems do sw.WriteLine(o.ToString); |
Die Umsetzung in C# sollte nicht schwer sein, die Befehle sind praktisch dieselben. Die Using-Anweisung ruft automatisch am Ende
sw.Dispose() auf, was auch den Puffer in die Datei schreibt. Es macht keinen Sinn, den Puffer in einer Schleife in die Datei zu schreiben, das macht den Puffer nutzlos.
mutterholzbein - Sa 19.01.08 00:21
Titel: ree
hmh habe deinen code in de art übernommen aber noch nicht den gewünschten effekt erzielt.er erstellt mir nun wiederum leere dateien...
nehme an das ich das nötige initialisierungsobjekt für die foreach-schleife nicht richtig gewählt habe.
naja,werde sehen was sich machen lässt, andernfalls (zur not) lasse ich die nutzerauswahl weg und speichere halt doch den kompletten inhalt...
trotzdem danke für alle hilfe, die mir so schnell gestellt wurde :D
hat man auch nicht immer
für weitere vorschläge bin ich weiterhin offen
Christian S. - Sa 19.01.08 00:25
Titel: Re: ree
mutterholzbein hat folgendes geschrieben: |
| hmh habe deinen code in de art übernommen aber noch nicht den gewünschten effekt erzielt.er erstellt mir nun wiederum leere dateien... |
Zeig den Code bitte mal. Hatte obigen Code getestet und er geht.
mutterholzbein - Di 05.02.08 23:34
Titel: re...
habe es letztendlich doch so gelöst das eben der gesamte inhalt der listbox in die datei gespeichert wird. habe aber noch extra eine funktion in die anwendung eingbaut die es dem user erlaubt einzelne zeilen in die zwischen ablage zu kopieren...fand ich ausreichend...
danke an alle die mir geholfen hatten
greetz mhb
:wave:
ps:
falls jemand den source für die fkt haben möchte...einfach ne pn
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!