Janchu88
Kapitän zur See , HWLUXX Vize-Superstar
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:
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
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
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: