Problem mit While Schleife

07/26/2014 17:16 supercracker13#1
Also ich bin gerade dabei ein kleines Programm zu schreiben um Dateien zu verschlüsseln.
Jetzt bin ich auf ein Problem gestoßen das eigentlich kein Problem sein sollte.
Folgendes ist aufgetreten.
Ich habe einen Code der auch funktioniert. Nur packt man diesen in eine while schleife läuft er nicht mehr richtig.

Hier ist der Code der funktioniert:
PHP Code:
                Console.ReadLine();
                
DecryptionInformation tempDI = new DecryptionInformation();
                
tempDI.Password File.ReadAllText(@"C:\Users\xxx\Desktop\meinekeys.txt");
                
tempDI.InputPath = @"C:\Users\xxx\Desktop\hajjfjah.fsfs";
                
Decryption dc = new Decryption(new EventManager.MyDelegate[] { objectStateobjectError }, tempDI);
                
dc.DIContainer.OutputPath = @"C:\Users\xxx\Desktop\TestBae\";
                dc.StartDecrypting();
                Console.WriteLine("
Ready"); 
Und jetzt in einer Schleife:
PHP Code:
            while (true)
            {
                
Console.ReadLine();
                
DecryptionInformation tempDI = new DecryptionInformation();
                
tempDI.Password File.ReadAllText(@"C:\Users\xxx\Desktop\meinekeys.txt");
                
tempDI.InputPath = @"C:\Users\xxx\Desktop\hajjfjah.fsfs";
                
Decryption dc = new Decryption(new EventManager.MyDelegate[] { objectStateobjectError }, tempDI);
                
dc.DIContainer.OutputPath = @"C:\Users\xxx\Desktop\TestBae\";
                dc.StartDecrypting();
                Console.WriteLine("
Ready");
            } 
Es sollen dabei Dateien entschlüsselt werden. Und ohne schleife wird es perfekt entpackt. Und in der Schleife fehlen ein paar Bytes.
Für mich ist das leider unerklärlich. Ich hoffe jemand weis ne Lösung

Edit: Ich habe das Problem schon gelöst. Ich musste einen Stream noch closen. Da wurden anscheinend die Bytes verschluckt.
Aber trotzdem wundert es mich das das passiert. Hat da jemand ne Erklärung für ?
07/26/2014 19:29 Terreox#2
Eine Beschreibung des auftretenden Problems wäre hilfreich. Wäre nett, wenn du ein paar Details dazu posten könntest.

Edit: Und es wäre gut zu wissen, woher die verwendeten Klassen kommen :)
07/27/2014 12:04 supercracker13#3
Ok. Das Problem ist einfach das sobald man das ganze in eine While Schleife Pack ein paar Bytes fehlen. Mehr kann ich dazu leider auch nicht sagen weil ich nicht mehr weis. Es kommt allerdings keine Fehlermeldung.

Zu den Klassen:
DecryptionInformation: Speichert nur ein paar Strings/Longs und hat sonst keine Aufgabe.
Decryption: Dort werden die Daten entschlüsselt.
Beide Klassen sind von mir geschrieben also nicht öffentlich verfügbar.

Mehr interessante Information fallen mir leider dazu nicht ein.
Hätte ja sein können das so etwas schon mal jemanden passiert ist oder das allgemein bekannt ist und ich das einfach nicht wusste ^^
07/27/2014 15:06 Schlüsselbein#4
Um sowas in Zukunft zu vermeiden, verwende das using-Konstrukt.
07/27/2014 19:14 supercracker13#5
Jo hab ich zu 95% auch. Hab nur ein paar wenige ohne gemacht. Der Grund ist mir zwar nicht mehr bewusst aber war halt so.
07/27/2014 22:39 Terreox#6
Naja ohne speziell den Code zu sehen kann man nicht viel darüber sagen. Generell schließe ich mich aber Schlüsselbeins Meinung an. Immer drauf achten IDisposables wieder freizugeben :) Hat in der Vergangenheit öfter mal Probleme bereitet^^
07/29/2014 11:51 Gareas#7
einfach gesagt wird ohne dein "close" der rest nach der schleife nunmal nicht ausgegeben (auch wenn du hier keine abbruch bedingung hast).
Du bekommst immer eine bestimmte anzahl an Packeten, wenn er neue packete bekommt werden die "alten" in deine Variable geschrieben. Wenn dann am ende keine neuen Packete mehr kommen werden die noch im Stream vorhanden nicht rausgeholt da es dem stream ja niemand sagt.

"Flush" würde man dann z.b dafür benutzen

Wie schon geschrieben wurde benutzt man "using" was sich dann um den aufbau sowie das schließen des streams kümmert.

hoffe konnte ein wenig helfen