Autor Beitrag
mutterholzbein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: 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:
ausblenden 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
                {
     // ich nehme an das der hund hier begraben liegt.
     // habe aber auch hier schon mehrere methoden probiert, alle mit
     // dem selben, oder einem noch schlechteren ergebnis!

                    File.WriteAllText(pfad, listBox1.Text);
                }
                catch(Exception ex)
                {
                    toolStripLabel1.Text = ex.Message.ToString();
                }
                this.Text = pfad;
            }
        }


danke im voraus... :)

greetz mhb

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Zuletzt bearbeitet von mutterholzbein am Fr 18.01.08 14:02, insgesamt 2-mal bearbeitet
mutterholzbein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: 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,
ausblenden 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,
ausblenden 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
    {
      //geänderter code:
      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 user profile iconChristian S.: Code- durch C#-Tags ersetzt


Zuletzt bearbeitet von mutterholzbein am Do 17.01.08 19:24, insgesamt 2-mal bearbeitet
Akula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: Do 17.01.08 19:33 
Titel: rööö Akula
user profile iconAkula 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 17.01.08 19:37 
Wenn ich das richtig verstehe, willst du nicht die ganz Box speichern, sondern nur bestimmte Zeilen?
Akula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 17.01.08 19:52 
Villeicht habe ich es, was du meinst, ahbe es aber nicht als Datei abgespeicht sondern ausgeben.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: 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:
ausblenden 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);
  // allerdings ist mir die abfrage noch etwas
  // suspekt!!mal sehen was man da machen kann
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: Fr 18.01.08 13:57 
user profile iconAkula 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:
ausblenden 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:

ausblenden 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); 
  // allerdings ist mir die abfrage noch etwas 
  // suspekt!!mal sehen was man da machen kann 
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Fr 18.01.08 14:32 
Villeicht ist es der Pfad, gib doch mal einen an. Zum testen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 18.01.08 15:00 
Wieso macht Ihr das so kompliziert? :gruebel:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: 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 :D
hat man auch nicht immer

für weitere vorschläge bin ich weiterhin offen
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 19.01.08 01:25 
Titel: Re: ree
user profile iconmutterholzbein 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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]
BeitragVerfasst: 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


:wave:

ps:
falls jemand den source für die fkt haben möchte...einfach ne pn