Laden...

Benutzer soll Pfad/Datei selber auswählen können

Erstellt von Elias1994 vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.834 Views
E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren
Benutzer soll Pfad/Datei selber auswählen können

Hallo,

ich schreibe hier Strings zeilenweise in ein Textdokument und lese die Strings anschließend zeilenweise wieder aus und fülle sie in Comboboxen.

Bisher kann ich aber nur eine bestimmtre Datei (hier test.txt) vorgeben.

Ich möchte aber das der benutzer zur Laufzeit entscheiden kann welche .txt-Datei er auswählt.

Es geht zum Beispiel um diese Stelle:

System.IO.File.WriteAllText(@"C:\test.txt", string.Empty);

Ich will hier die Datei .txt nicht vorgeben. Der Benutzer soll selber entscheiden welche .txt er benutzen will.

  string[] stringArray = new string[4];
        private void button1_Click(object sender, EventArgs e)
        {
            stringArray[0] = "afdsfdsaf";
            stringArray[1] = "bdfdaf";
            stringArray[2] = "cdfdsaf";

            System.Diagnostics.Process.Start(@"C:\");

            System.IO.File.WriteAllText(@"C:\test.txt", string.Empty);

            using (System.IO.StreamWriter file =
            new System.IO.StreamWriter(@"C:\test.txt", true))
                {
                file.WriteLine(stringArray[0]);
                file.WriteLine(stringArray[1]);
                file.WriteLine(stringArray[2]);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string[] lines = System.IO.File.ReadAllLines(@"C:\test.txt");

            comboBox1.Text = lines[0];
            comboBox2.Text = lines[1];
            comboBox3.Text = lines[2];
        }
    }
1.040 Beiträge seit 2007
vor 8 Jahren

Stichwort: OpenFileDialog zum Öffnen, SaveFileDialog zum Speichern. =)

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Also was ich will,

wenn Button1 geklickt wird, soll eine Textdatei enstehen.
Mache ich ja bisher mit StreamWriter.

Der Benutzer soll aber bevor die Datei abgespeichert wird den Pfad und den Dateiname angeben können bzw. dazu aufgefordert werden.

J
251 Beiträge seit 2012
vor 8 Jahren

Und was passt nicht mit der Option von p!lle?

1.040 Beiträge seit 2007
vor 8 Jahren

@Elias1994: Hast du dir die Links angeguckt? 😉

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Ich denke der Weg ist schon richtig un d ja habe mir die Links angeschaut,a ber keine passende Methode für meine Anwendung gefunden.

// Den Pfad kann ich öffnen

OpenFileDialog openFile = new OpenFileDialog();
openFile.InitialDirectory = @"C:\";

Aber finde keinen Befehl, der den Benutzer auffordert im geöffneten Pfad eine .txt anzulegen.

Wenn der Benutzer einen Dateinamen eingeben hat (Beispoielsweise test2) ensteht eine Datei test2.txt im ausgewählten Pfad.

Dann sollen automatisch die 3 Strings in die erstellte test2.txt geschrieben werden.
(siehe oben: streamwriter)

1.040 Beiträge seit 2007
vor 8 Jahren

Zum Speichern musst du den SaveFileDialog nutzen.

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren
SaveFileDialog dlg = new SaveFileDialog();
                dlg.InitialDirectory = @"C:\";
                dlg.ShowDialog();
                dlg.FileName = "Preset_Name"; // Default file name
                dlg.DefaultExt = ".txt"; // Default file extension
                dlg.Filter = "Text documents (.txt)|*.txt";
                

Warum werden meine Filename und die Endung nichtübernommen?

J
251 Beiträge seit 2012
vor 8 Jahren

Und Filter ist keine Möglichkeit?

1.040 Beiträge seit 2007
vor 8 Jahren

Du musst erst die Optionen setzen, bevor du den Dialog öffnest. 😉[Artikel] Debugger: Wie verwende ich den von Visual Studio?

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

@pille ja habe ich zu spät bemerkt

SaveFileDialog dlg = new SaveFileDialog();
                dlg.InitialDirectory = @"C:\";
                dlg.FileName = "Preset_Name"; // Default file name
                dlg.DefaultExt = ".txt"; // Default file extension
                dlg.Filter = "Text documents (.txt)|*.txt";
                dlg.ShowDialog();

Leider speichert er es aber nicht 😦

J
251 Beiträge seit 2012
vor 8 Jahren

Wieso hast du den ganzen Beitrag raus editiert? So fehlt doch nun ein kleiner logischer Verlauf für den nächsten der evtl. diese Problematik hat

[Edit]Beitrag wurde verändert wieder rein editiert und wohl mit neuer Problemstellung 😕 (Post vom 03.03.2016 14:21))[/Edit]

C
2.121 Beiträge seit 2010
vor 8 Jahren

Leider speichert er es aber nicht 😦

"Er" lässt dich nur einen Pfad zum speichern auswählen. "Du" speicherst das dann unter diesem Pfad, bzw. dein Programm.

1.040 Beiträge seit 2007
vor 8 Jahren

Der SaveFileDialog speichert auch nichts - er ist für die Auswahl eines Dateinamen/-pfades konzipiert. Diesen musst du nach dem Schließen entsprechend nutzen.

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Ja wenn ich auf speichern klicke, ist nacher kein Textdokument unter diesem Pfad zu finden.

709 Beiträge seit 2008
vor 8 Jahren

Das Textdokument musst du selbst durch deinen Code anlegen.
Den vom Nutzer ausgewählten Pfad kannst du aus dem Dialog auslesen.

1.040 Beiträge seit 2007
vor 8 Jahren

Noch als Zusatz:
Das Speichern machst du wie bisher auch. Lediglich dein fester Bestandteil "C:\Test.txt" wird durch den SaveFileDialog "ersetzt", in dem dort der NAME für die Datei ausgewählt/festgelegt wird.

Der SaveFileDialog speichert keine Dateien - genauso wenig wie der OpenFileDialog welche öffnet - sie dienen nur der Auswahl einer Datei/eines Dateinamen.

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Danke euch. Funzt jetzt 😉
Wieder was gelernt.

Ich probier mich mal jetzt am umgekehrten Weg 😄

        private void button1_Click(object sender, EventArgs e)
        {
            stringArray[0] = "afdsfdsaf";
            stringArray[1] = "bdfdaf";
            stringArray[2] = "cdfdsaf";





            SaveFileDialog dlg = new SaveFileDialog();
            //dlg.InitialDirectory = @"C:\";
            dlg.FileName = "Preset_Name"; // Default file name
            dlg.DefaultExt = ".txt"; // Default file extension
            dlg.Filter = "Text documents (.txt)|*.txt";
            dlg.ShowDialog();


            //System.IO.File.WriteAllText(dlg.OpenFile(), string.Empty);

            using (System.IO.StreamWriter file =
                new System.IO.StreamWriter(dlg.OpenFile()))
                {
                    file.WriteLine(stringArray[0]);
                    file.WriteLine(stringArray[1]);
                    file.WriteLine(stringArray[2]);
                }
       }
J
251 Beiträge seit 2012
vor 8 Jahren

Ich empfehle dir nicht einfach ShowDialog aufzurufen ohne den DialogResult auszuwerten. Vllt hat der Benutzer doch keine Lust auf speichern etc.

1
124 Beiträge seit 2012
vor 8 Jahren

Und nicht vergessen den Stream zu schließen sonst kannst du die Datei mit einem anderen Programm nicht öffen, solange dein Programm läuft.

private void button1_Click(object sender, EventArgs e)
        {
            stringArray[0] = "afdsfdsaf";
            stringArray[1] = "bdfdaf";
            stringArray[2] = "cdfdsaf";





            SaveFileDialog dlg = new SaveFileDialog();
            //dlg.InitialDirectory = @"C:\";
            dlg.FileName = "Preset_Name"; // Default file name
            dlg.DefaultExt = ".txt"; // Default file extension
            dlg.Filter = "Text documents (.txt)|*.txt";
            dlg.ShowDialog();


            //System.IO.File.WriteAllText(dlg.OpenFile(), string.Empty);

            using (System.IO.StreamWriter file =
                new System.IO.StreamWriter(dlg.OpenFile()))
                {
                    file.WriteLine(stringArray[0]);
                    file.WriteLine(stringArray[1]);
                    file.WriteLine(stringArray[2]);
                    file.Close();
                }
       }
1.040 Beiträge seit 2007
vor 8 Jahren

@123thomas: Das ist nicht zwingend notwendig, da das using diese Aufgabe übernimmt.

3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

Und nicht vergessen den Stream zu schließen

ist an dieser Stelle wegen der Nutzung von using nicht explizit nötig. Der dem StreamWriter zugrundeliegende Stream wird dadurch gleich mit geschlossen.

Gruß, MarsStein

Edit: zu spät, aber nun war's schon mal geschrieben...

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

1
124 Beiträge seit 2012
vor 8 Jahren

Okay das wusste ich jetzt nicht. Danke 😁 👍

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

So jetzt beim Auslesen habe ich noch ein kleines Problem.

Habe jetzt Ja in einer .txt 4 Zeilen mit Text.

Möchte jetzt das der Benutzer die txt auswählen kann.
Durch das Auswählen sollen die einzelnen Zeilen in comboboxen gefüllt werden.

Zeile1 in combo 1, zeile2 in combo2, .....

Da in der while Schleife passt das noch nicht. Wie weise ich den Comboboxen die richtige Zeile zu?

Was muss ich ändern?

private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.InitialDirectory = @"C:\";
            open.Filter = "Text documents (.txt)|*.txt";

            

            if (open.ShowDialog() == DialogResult.OK)
            {
                string lines= null;
                int zeilenCounter = 0;

                using (System.IO.StreamReader file =
                new System.IO.StreamReader(open.OpenFile()))
                {

                    while ((lines = file.ReadLine()) != null)
                    {
                        zeilenCounter++;

                        if (zeilenCounter == 1)
                        { comboBox1.Text = System.Console.WriteLine(lines); }

                        if (zeilenCounter == 2)
                       // {//comboBox2.Text = lines[1];}

                        if (zeilenCounter == 3)
                        //{//comboBox3.Text = lines[2];}
                    }
                }
            }
        }
3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

comboBox1.Text = System.Console.WriteLine(lines);  

Willst Du den Text nun auf die Konsole oder in die ComboBox? 😉

Ich denke Du suchst

comboBox1.Items.Add(lines)  

...

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

E
Elias1994 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Danke euch 😉

Hier die Lösung für das Auslesen der Textdatei und das Schreiben der ausgelesenen Zeilen in Comboboxen

private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.InitialDirectory = @"C:\";
            open.Filter = "Text documents (.txt)|*.txt";

            

            if (open.ShowDialog() == DialogResult.OK)
            {
                string lines= null;
                int zeilenCounter = 0;

                using (System.IO.StreamReader file =
                new System.IO.StreamReader(open.OpenFile()))
                {

                    while ((lines = file.ReadLine()) != null)
                    {
                        zeilenCounter++;

                        if (zeilenCounter == 1)
                        { comboBox1.Text = lines; }

                        if (zeilenCounter == 2)
                        { comboBox2.Text = lines;}

                        if (zeilenCounter == 3)
                        { comboBox3.Text = lines;}
                    }
                }
            }
        }