WinForm C# Prüfe zuerst logs.txt entries, bevor das TXT Datei erstellt wird.

  • C#

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    WinForm C# Prüfe zuerst logs.txt entries, bevor das TXT Datei erstellt wird.

    Also seit gut 2 Wochen versuche ich diese eine Funktion zu machen.

    Es klappt, bis eine Funktion, die ich noch hinzufügen muss.

    Ich habe ein Programm gemacht, welche von 2 Textboxen und ein Kombobox text nimmt und das als TXT Datei in dem Ordner speichert, welche beim programmstart ausgewählt werden muss. Es muss ohne Datenbank funktionieren, weswegen es so viele Schwierigkeiten mit sich bringt.

    Bei der "Rechnungsssnummertxt.Text" wird von User die daten eingetragen. datenbsankcombobox.Text wird die ausgewählte daten genommen. Bei der trackingcodetxt.Text wird random eine Nummer generiert und die Länge wird von NumericUpDown genommen.

    Jetzt muss das Programm alle daten sowohl auch vorgewählte Pfad, als auch in dem Programm mit erstellte LOGS.TXT alle daten speichern. Also nicht nur bei der ausgewählte Pfad, sondern auch bei der LOGS.TXT Datei.

    Bevor mein Programm in den ausgewählten Pfad speichert, muss einmal überprüfen, ob diese Daten (hier kann entweder das trackingcodetxt.Text oder Rechnungsssnummertxt.Text) schonmal gespeichert worden sind, wenn nicht, soll der TXT in den vorausgewählten Pfad gespeichert werden. Wenn ja, soll das Programm ein MessageBox öffnen "Die Daten wurden bereits generiert".

    Hier mein Code:

    C#-Quellcode

    1. private void generierenbtn_Click(object sender, EventArgs e)
    2. {
    3. //so here check the Logs.txt file before the the step, if also entery has in the Logs.txt file then do nothing give error code, if not make the step under.
    4. int stringLength = (int)laengeupdown.Value;
    5. trackingcodetxt.Text = "B2B" + GetRandomString(stringLength);
    6. string folderPath = Path.Combine(this.pfadtxt.Text, this.trackingcodetxt.Text + ".txt");
    7. using (StreamWriter sw = new StreamWriter(folderPath))
    8. {
    9. sw.WriteLine(";" + this.trackingcodetxt.Text + ";;;;;;;;;;;;;;;;;;;;;" + this.rechnungsnummertxt.Text + ";" + this.datenbankcombobox.Text);
    10. MessageBox.Show("Erfolgreich", "Auto-Save | V1.0.2", MessageBoxButtons.OK, MessageBoxIcon.Information);
    11. clearbtn.Enabled = true;
    12. rechnungsnummertxt.Text = "";
    13. trackingcodetxt.Text = "";
    14. infolabel.Text = "Erfolgreich: " + rechnungsnummertxt.Text;
    15. infolabel.ForeColor = Color.DarkGreen;
    16. }
    17. }
    18. private string GetRandomString(int length)
    19. {
    20. string letters = "qwertzuioplkjhgfdsayxcvbnmQWERTZUIOPLKJHGFDSAYXCVBNBM1234567890";
    21. Random random = new Random((int)DateTime.Now.Ticks);
    22. string randomString = "";
    23. for (int i = 0; i < length; i++)
    24. {
    25. randomString += letters[random.Next(0, letters.Length - 1)];
    26. }
    27. return randomString;
    28. }
    29. private void pfadbtn_Click(object sender, EventArgs e)
    30. {
    31. if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
    32. {
    33. pfadtxt.Text = folderBrowserDialog1.SelectedPath;
    34. Properties.Settings.Default.datenbanks = datenbankcombobox.Text;
    35. Properties.Settings.Default.savefolder = pfadtxt.Text;
    36. Properties.Settings.Default.Save();
    37. MessageBox.Show("Pfad automatisch gespeichert zum ändern bitte Programm reseten oder nochmal auswählen!.", "Auto-Save | V1.0.2", MessageBoxButtons.OK, MessageBoxIcon.Information);
    38. rechnungsnummertxt.Enabled = true;
    39. generierenbtn.Enabled = true;
    40. this.Size = new Size(420, 210);
    41. }
    42. else
    43. {
    44. MessageBox.Show("Ohne Pfad kann keine Datei erstellt u. gespeichert werden!", "PFAD AUSWÄHLEN!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    45. }
    46. }


    Könnte mir bitte jemand dabei helfen?
    Kannst Du bitte nochmal für mich in 1-2 kurzen, einfachen Sätzen schreiben, was Dein Wunschziel wäre?
    Soll geprüft werden, ob es bereits eine Datei gibt, die den per Zufall generierten Namen schon hat? Das wäre dann mit if (IO.File.Exists(VollständigerDateipfad)) erreichbar.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo @VaporiZed danke für deine Hilfe!

    Also ich hoffe, du hast verstanden, was mein Programm einigermaßen macht.

    Kurz zusammengefasst: Mein Programm erstellt ein TXT Datei anhand 3 TextBoxen und speichert in den Ordner ein, welche sich der Nutzer selber auswählt.

    Jetzt aber soll parallel dazu ein IF Funktion vorkommen, bevor das Programm eine TXT Datei erstellt, soll er zuerst in den EXE Ordner drinne Logs gucken, ob schonmal von textbox1 2 und/oder 3 sowas schonmal erstellt wurde, wenn ja, soll Error geben, wenn nicht wie gewünscht eine TXT Datei erstellten.

    Alle Einträge sollen, nachdem überprüfen auch in Logs als neue Zeile gespeichert werden und die TXT Datei generiert werden. Ich hoffe, ich habe mich einigermaßen klar ausgedrückt :/

    Sehe hier bei meine Code Zeile, wo diese Funktion sein sollte (Z.4)
    Ich weiß nicht, was ich noch schreiben soll? Du bastelst Dir in Zeile#9 also Deinen Wunschdateipfad zusammen.
    Warum Du den Namen in einer Variable namens folderPath speicherst, weiß ich nicht, weil folderpath meines Wissens eben Ordnerpfad heißt und nicht Dateipfad, aber ist ja egal.
    Und dann prüfst Du eben, ob es die Datei gibt, bevor Du mit Zeile#10 weitermachst, indem Du schreibst

    C#-Quellcode

    1. if (IO.File.Exists(folderPath)) //Datei mit dem Namen existiert schon, daher …
    2. {
    3. //… hier einen Fehler anzeigen
    4. }
    5. else //Datei existiert mit dem Wunschnamen noch nicht, daher …
    6. {
    7. //… hier die neue Datei erzeugen wie bisher
    8. }
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    wo mache ich falsch eigentlich?

    Ich will, dass das Programm auch in den Desktop speichert und auch in den vorausgewählten Ordner, jedoch speichert er nur in vorausgewählten Ordner :/

    C#-Quellcode

    1. int stringLength = (int)laengeupdown.Value;
    2. trackingcodetxt.Text = "B2B" + GetRandomString(stringLength);
    3. string folderPath = Path.Combine(this.pfadtxt.Text, this.trackingcodetxt.Text + ".txt"); //Speicher in den vorausgewählten Ordner
    4. string folderPath2 = Path.Combine(Environment.SpecialFolder.Desktop + this.trackingcodetxt.Text + ".txt"); // Speicher den selben TEXT Datei auch in Desktop.
    5. using (StreamWriter sw = new StreamWriter(folderPath))
    6. using (StreamWriter aw = new StreamWriter(folderPath2))
    7. if (File.Exists(Application.StartupPath)) //Datei mit dem Namen existiert schon, daher …
    8. {
    9. MessageBox.Show("Bereits erstellt!", "Auto-Save | V1.0.2", MessageBoxButtons.OK, MessageBoxIcon.Error);
    10. }
    11. else //Datei existiert mit dem Wunschnamen noch nicht, daher …
    12. {
    13. sw.WriteLine(";" + this.trackingcodetxt.Text + ";;;;;;;;;;;;;;;;;;;;;" + this.rechnungsnummertxt.Text + ";" + this.datenbankcombobox.Text);
    14. aw.WriteLine(";" + this.trackingcodetxt.Text + ";;;;;;;;;;;;;;;;;;;;;" + this.rechnungsnummertxt.Text + ";" + this.datenbankcombobox.Text);
    15. MessageBox.Show("Erfolgreich", "Auto-Save | V1.0.2", MessageBoxButtons.OK, MessageBoxIcon.Information);
    16. clearbtn.Enabled = true;
    17. rechnungsnummertxt.Text = "";
    18. trackingcodetxt.Text = "";
    19. infolabel.Text = "Erfolgreich: " + rechnungsnummertxt.Text;
    20. infolabel.ForeColor = Color.DarkGreen;


    8|
    Schau mal zur Laufzeit in die Variable folderPath2 rein, welchen Wert die hat. Das ist garantiert nicht der Wunschwert. Code solltest Du auch testen und nicht nur vermuten, was er macht.
    Außerdem verwendest Du IO.Path.Combine für folderpath2 falsch.
    Warum verwendest Du überhaupt StreamWriter?
    Es gibt viel einfacher auch IO.File.WriteAllLines, IO.File.AppendAllLines, IO.FileWriteAllText, IO.File.AppendAllText
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed ..

    VaporiZed schrieb:

    folderPath2


    Jetzt habe ich so umgeschrieben:

    C#-Quellcode

    1. private void generierenbtn_Click(object sender, EventArgs e)
    2. {
    3. int stringLength = (int)laengeupdown.Value;
    4. trackingcodetxt.Text = "B2B" + GetRandomString(stringLength);
    5. string folderPath = Path.Combine(this.pfadtxt.Text, this.trackingcodetxt.Text + ".txt");
    6. string copyPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
    7. using (StreamWriter sw = new StreamWriter(folderPath))
    8. using (StreamWriter aw = new StreamWriter(copyPath))
    9. if (File.Exists(Application.StartupPath)) //Datei mit dem Namen existiert schon, daher …
    10. {
    11. MessageBox.Show("Bereits erstellt!", "Auto-Save | V1.0.2", MessageBoxButtons.OK, MessageBoxIcon.Error);
    12. }
    13. else //Datei existiert mit dem Wunschnamen noch nicht, daher …
    14. {
    15. sw.WriteLine(";" + this.trackingcodetxt.Text + ";;;;;;;;;;;;;;;;;;;;;" + this.rechnungsnummertxt.Text + ";" + this.datenbankcombobox.Text);
    16. aw.WriteLine(";" + this.trackingcodetxt.Text + ";;;;;;;;;;;;;;;;;;;;;" + this.rechnungsnummertxt.Text + ";" + this.datenbankcombobox.Text);
    17. MessageBox.Show("Erfolgreich", "Auto-Save | V1.0.2", MessageBoxButtons.OK, MessageBoxIcon.Information);
    18. clearbtn.Enabled = true;
    19. rechnungsnummertxt.Text = "";
    20. trackingcodetxt.Text = "";
    21. infolabel.Text = "Erfolgreich: " + rechnungsnummertxt.Text;
    22. infolabel.ForeColor = Color.DarkGreen;
    23. }
    24. }


    Ich bekomme aber diesen Error: System.UnauthorizedAccessException: "Der Zugriff auf den Pfad "C:\Users\USER\Desktop" wurde verweigert."

    Du hast wohl ganz dezent den Dateinamen vergessen …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ok. Jetzt habe ich mein Fehler entdeckt.

    C#-Quellcode

    1. ​string copyPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)); //Hier habe ich vergessen, wie der TXT Datei heißen soll.....


    Es sollte so sein -->
    ​string copyPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop, "random" +".txt"));