Autor |
Beitrag |
mutterholzbein
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Do 17.01.08 17:11
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
Zuletzt bearbeitet von mutterholzbein am Fr 18.01.08 14:02, insgesamt 2-mal bearbeitet
|
|
mutterholzbein 
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Do 17.01.08 18: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!
 greetz, mhb
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
Zuletzt bearbeitet von mutterholzbein am Do 17.01.08 19:24, insgesamt 2-mal bearbeitet
|
|
Akula
      
Beiträge: 26
|
Verfasst: Do 17.01.08 19: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 
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Do 17.01.08 19: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...?
aber hast du ne idee wie ich die ausgewählten zeilen in die datei schreibe?
greetz,mhb
|
|
Akula
      
Beiträge: 26
|
Verfasst: Do 17.01.08 19:37
Wenn ich das richtig verstehe, willst du nicht die ganz Box speichern, sondern nur bestimmte Zeilen?
|
|
Akula
      
Beiträge: 26
|
Verfasst: Do 17.01.08 19: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 
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Do 17.01.08 20: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
      
Beiträge: 26
|
Verfasst: Do 17.01.08 23: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 
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Fr 18.01.08 13:57
|
|
Akula
      
Beiträge: 26
|
Verfasst: Fr 18.01.08 14:32
Villeicht ist es der Pfad, gib doch mal einen an. Zum testen.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 18.01.08 15:00
Wieso macht Ihr das so kompliziert?
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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mutterholzbein 
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Sa 19.01.08 01: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
hat man auch nicht immer
für weitere vorschläge bin ich weiterhin offen
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 19.01.08 01: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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mutterholzbein 
      
Beiträge: 47
Erhaltene Danke: 1
[Win XP pro,Win 7pro, Ubuntu 10.04]
[MS Visual Studio 2008 pro TeamSystem,VS-2010-Ultimate [C, C++ (u.a. mit QT4), C#, PHP]
|
Verfasst: Mi 06.02.08 00: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
ps:
falls jemand den source für die fkt haben möchte...einfach ne pn
|
|
|