
Es muss kein Array sein, ein Stream / MemoryStream gänge auch - nur eben was mit wahlfreiem Zugriff.
Hier der Problem-Code:
Code: Alles auswählen
private void button1_Click(object sender, EventArgs e)
{
// Variablendeklaration:
Byte test = 0;
string in_string = "", out_string = ""; // "fast" nutzlos ...
long in_arr_gr = 0; // Größe der Original-Datei (gepackt)
long out_arr_gr = 0;// Größe der Entpackten Datei - größer geschätzt !!!
byte[] in_array = null; // unten initialisiert
byte[] out_array = null; // unten initialisiert
// Prog. selbst:
// Datei öffnen in Var. "in_string"
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Alle Dateien (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
in_string = ofd.FileName;
// Datei öffnen in Array "in_array"
FileStream in_stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
BinaryReader br1 = new BinaryReader(in_stream);
// in_array = new byte[in_arr_gr]; // Größe der Original-Datei - entfällt weg. " = null" ???
in_arr_gr = in_string.Length;
in_array = br1.ReadBytes((int)in_arr_gr);
out_arr_gr = in_arr_gr * 2; // die Datei kann so nur doppelt so groß werden !!!
out_array = new byte[out_arr_gr];
// Hier müsste die eigentliche Routine stehen - jetzt einfacher 4-Byte-Kopier-Test
test = in_array[0];
out_array[0] = test;
test = in_array[1];
out_array[1] = test;
test = in_array[2];
out_array[2] = test;
test = in_array[3];
out_array[3] = test;
// Datei speichern unter Var. "out_string"
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Alle Dateien (*.*)|*.*";
if (sfd.ShowDialog() == DialogResult.OK)
out_string = sfd.Filter = "Alle Dateien (*.*)|*.*";
// out_string = sfd.FileName;
// speichern des Array - vorhandene Datei wird überschrieben !!!
FileStream out_stream = new FileStream(sfd.FileName, FileMode.Create);
out_stream.Write(out_array, 0, out_array.Length);
out_stream.Close();
}