Prob mit C# programm und Filestream

Janchu88

Kapitän zur See , HWLUXX Vize-Superstar
Thread Starter
Mitglied seit
29.11.2005
Beiträge
5.271
Ort
irgendwo im Nirvana...
Hi,

will ein Prog schreiben, dass als primäre aufgabe erstmal Dateien einlesen können muss und aufsplitten muss... sollen später 8kb blöcke werden, zur übersichtlichkeit hab ich erstmal 1MB Blöcke genommen... als testdatei zum einlesen nehme ich den 3dmark 06 Hotfix...

Hier der Codeausschnitt zum einlesen und splitten:

Code:
  url = textBox1.Text;
            if (File.Exists(url))
            {
                FileStream bla = new FileStream(url, FileMode.Open);
                long laenge = bla.Length;
                parzelle = 0;

                parzelle = laenge / mbyte;
                if (laenge % mbyte > 0)
                { parzelle += 1; }

                byte[] arr = new byte[1048576];

                int offset = 0;
                int count = 1048576;
                                
                for (long i = 0; i < parzelle; i++)
                {
                    string directory = "C:\\bla\\test";
                    directory += (i + ".txt");

                    [b]if ((i + 2) == parzelle)
                    {
                        count = Convert.ToInt32(laenge % (mbyte * (parzelle - 1)));
                        byte[] arr2 = new byte[count];
                        int offset2 = Convert.ToInt32(mbyte * (parzelle - 1));
                        bla.Read(arr2, offset2, count);
                        File.WriteAllBytes(directory, arr2);
                        
                    }[/b]

                    else
                    {
                        bla.Read(arr, offset, count);

                        File.WriteAllBytes(directory, arr);

                        offset += 1048576;
                    }
                }

Insgesamt sollten es ja 3 Blöcke werden, 2 x 1MB und der letzte wird durch die markierte verzweigung erstellt...

Allerdings wirft er mir jedesmal ne exception aus beim einlesen in den Stream

Code:
Offset und Länge für das Array liegen außerhalb des gültigen Bereichs, oder die Anzahl ist größer als die Anzahl der Elemente vom Index bis zum Ende der Quellauflistung.

Allerdings wenn ich mir die Werte so angucke die in der verzweigung entstehen kann das nicht sein...

Die eingelesene Datei ist 2630528 bytes gross
Dem gegenüber steht der anfangslesepunkt des streams bei byte 2097152 (offset)
Die Anzahl der zu lesenden Bytes liegt bei 533376 bytes (count)

Wenn ich jetzt mal kurz addiere... 2097152 + 533376 = 2630528... passt also

Also frag ich mich, an welcher Stelle ich mehr bytes in mein Array einlese, als das Array groß ist? Die größe des Arrays wird durch die gleiche Variable beschrieben wie die Anzahl der einzulesenden Elemente und egal wie gross ich das Array mache krieg ich die exception. (mal abgesehen von outofmemory wenn ichs zu gross mache ;) )

ich verzweifel grad echt daran
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Code:
count = Convert.ToInt32(laenge % (mbyte * (parzelle - 1)));
byte[] arr2 = new byte[count];
int offset2 = Convert.ToInt32(mbyte * (parzelle - 1));
bla.Read(arr2, offset2, count);
File.WriteAllBytes(directory, arr2);

in bla.Read ist count ist die max. Anzahl von bytes die geschrieben werden. Da count auch gleichzeitig die größe von arr2 initialisiert, wird immer eine Exception geworfen wenn offset2 > 0.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh