Laden...

Zeilen in Textdatei schreiben

Erstellt von smichae vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.151 Views
S
smichae Themenstarter:in
260 Beiträge seit 2007
vor 16 Jahren
Zeilen in Textdatei schreiben

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

S
125 Beiträge seit 2005
vor 16 Jahren

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>_
*************************

2.891 Beiträge seit 2004
vor 16 Jahren

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

S
smichae Themenstarter:in
260 Beiträge seit 2007
vor 16 Jahren

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