Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Zeilen in Textdatei schreiben
smichae
myCSharp.de - Member



Dabei seit:
Beiträge: 264

Themenstarter:

Zeilen in Textdatei schreiben

beantworten | zitieren | melden

Ich hab mal so zum Spaß folgendes Programm geschrieben. Hat mich einfach interessiert.
Es wird ein md5-Hash(md5_original) mit Strings, die in md5-Hashes umgewandelt werden, aus Textdateien in einem bestimmten Verzeichnis verglichen. Die Textdateien haben folgenden Aufbau:

test
noch
ein
wort
Wenn ich eine Datei in dem Verzeichnis haben wird der richtige String in die Datei NewDatei.txt geschrieben.
Sobald ich aber mehrere Dateien in dem Verzeichnis habe werden nur leere Zeilen in die Datei NewDatei.txt geschrieben.
Woran kann das liegen? Bei einer geht es ja.
Danke für eure Hilfe.


        public void Readtextfile()
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

            string md5_original = "187ef4436122d1cc2f40dc2b92f0eba0";

            string[] txtfile = Directory.GetFiles("D:/test/Dic");
            int anzfiles = Directory.GetFiles("D:/test/Dic").Length;

            for (int x = 0; x < anzfiles; x++)
            {
                FileStream wF = new FileStream(txtfile[x], FileMode.Open, FileAccess.Read);
                StreamReader r = new StreamReader(wF);
                int lines = File.ReadAllLines(txtfile[x]).Length;

                string txtfilepath = "D:/test/NewDatei.txt";
                FileStream fs = new FileStream(txtfilepath, FileMode.Create, FileAccess.Write);
                StreamWriter w = new StreamWriter(fs);
                for (int i = 0; i < lines; i++)
                {
                    w.BaseStream.Seek(0, SeekOrigin.End);
                    byte[] bytes = Encoding.UTF8.GetBytes(r.ReadLine());
                    System.Text.StringBuilder s = new System.Text.StringBuilder();
                    byte[] md5_byte = md5.ComputeHash(bytes);
                    foreach (byte b in md5_byte)
                    {
                        s.Append(b.ToString("x2").ToLower());
                    }
                    
                    string md5_result = s.ToString();
                    bool result = md5_result.Equals(md5_original);

                    if (result == true)
                    {
                        w.WriteLine("Passwort:" + File.ReadAllLines(txtfile[x])[i]);
                        textBox1.Text = File.ReadAllLines(txtfile[x])[i];
                    }
                    else
                        w.WriteLine();
                }
                w.Close();
                r.Close();
                fs.Close();
                wF.Close();
            }
        }
Achso, zum Testen hab ich mal eine Texbox hinzugefügt. Da wird immer der richtige String angezeigt.

Gruß
Michael
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von smichae am .
private Nachricht | Beiträge des Benutzers
SGT_BOB
myCSharp.de - Member



Dabei seit:
Beiträge: 125
Herkunft: Aachen

beantworten | zitieren | melden

Hallo.

Ich meine der Fehler liegt dabei das du jedes mal die Datei neu erstellst und dabei die alte überschreibst.


FileStream fs = new FileStream(txtfilepath, FileMode.Create, FileAccess.Write);

muss in


FileStream fs = new FileStream(txtfilepath, FileMode.Append, FileAccess.Write);

umgewandelt werden dann sollte es funktionieren.

Mfg

SGT_BOB
*************************
Ich bin root, ich darf das...
root>_
*************************
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

Ich hab deinen Code mal refaktorisiert. Nimm doch die Methoden der File-Klasse, dann kannst du dir das ganze rumhantieren mit den Streams sparen.

public void Readtextfile()
{
	string sourceDirectory = "D:/test/Dic";
	string destinationFile = "D:/test/NewDatei.txt";
	string md5Original = "187ef4436122d1cc2f40dc2b92f0eba0";

	MD5CryptoServiceProvider md5CryptoServiceProvider = new MD5CryptoServiceProvider();
	foreach (string textfile in Directory.GetFiles(sourceDirectory))
		foreach (string line in File.ReadAllLines(textfile))
		{
			byte[] bytes = md5CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(line));

			string result = "";
			foreach (byte b in bytes)
				result += b.ToString("x2").ToLower();

			if (result==md5Original)
				File.AppendAllText(destinationFile,"Passwort: "+line);
		}
}

Gruß
dN!3L
private Nachricht | Beiträge des Benutzers
smichae
myCSharp.de - Member



Dabei seit:
Beiträge: 264

Themenstarter:

beantworten | zitieren | melden

Danke euch beiden für eure Hilfe. Danke dN!3L für den um einiges kürzeren Code.
Irgendwie ist der Code mit der Zeit einfach lang geworden. Ging mir erstmal nur um die Funktionalität.
Werd beides morgen probieren.

Guts Nächtle
Michael
private Nachricht | Beiträge des Benutzers