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];
}
}
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.
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)
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?
Du musst erst die Optionen setzen, bevor du den Dialog öffnest. 😉[Artikel] Debugger: Wie verwende ich den von Visual Studio?
@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 😦
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]
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.
Der SaveFileDialog speichert auch nichts - er ist für die Auswahl eines Dateinamen/-pfades konzipiert. Diesen musst du nach dem Schließen entsprechend nutzen.
Ja wenn ich auf speichern klicke, ist nacher kein Textdokument unter diesem Pfad zu finden.
Das Textdokument musst du selbst durch deinen Code anlegen.
Den vom Nutzer ausgewählten Pfad kannst du aus dem Dialog auslesen.
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.
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]);
}
}
Ich empfehle dir nicht einfach ShowDialog aufzurufen ohne den DialogResult auszuwerten. Vllt hat der Benutzer doch keine Lust auf speichern etc.
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();
}
}
@123thomas: Das ist nicht zwingend notwendig, da das using
diese Aufgabe übernimmt.
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
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];}
}
}
}
}
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
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;}
}
}
}
}