Datei komplett auslesen und Byteweise analysieren
-
Hallo erstmal,
Ich schreibe gerade ein Programm das eine Datei komplett einlesen soll in ein BYTE Array und dann von jedem Byte der Datei den ASCCI Code Wert ermittel soll. Mein Problem nun. Die Datei soll in einem Array stehen. Dynamische Arrays sind unter C++ nur mit Vectoren erlaubt soviel habe ich auch schon rausgefunden. Die einzulesende Datei ist nie größer als 16 MB. Es würde also reichen wenn das Array 16 MB Daten speichern könnte. Hier erstmal mein Quellcode der nicht funzt:
CString Pfad =""; CFile Datei; CFile Datei2; CFileDialog file_dlg(TRUE, "ekg", "*.*"); if (file_dlg.DoModal()== IDOK ) { Pfad = file_dlg.GetPathName(); Datei.Open(Pfad,CFile::modeRead); BYTE buffer[16777216]; m_wert = Datei.Read(buffer,Datei.GetLength()); UpdateData(FALSE); }
Der Fehler liegt in der Zeile: BYTE buffer[16777216]; soviel habe ich auch raus bekommen. Ich denke die Größe des Arrays ist einfach zu groß. Aber wie kann ich mein Problem bewältigen?
Das mit dem ASCCI Code Wert ermitteln mache ich indem ich jedes Array Element caste nach int, das funzt auch. Nur wie lese ich eine komplette 16 MB große Datei ein oder ambeste unbegrenztgroße.
Vielen Dank schonmal!! Hoffe es kann mir einer weiterhelfen. Bin schon verzweifelt.
Gruß Dennis G.
-
Dynamische Arrays gehen auch ohne vectors. Probier mal das (statt der Zeile BYTE buffer[..];
DWORD dwFileLen = Datei.GetLength(); BYTE* buffer = new BYTE [dwFileLen];
jetzt kannst du mit buffer wie mit einem normalen Array arbeiten. Und wenn du fertig bist mit lesen, machst du
delete [] buffer;
-
Super Danke das hat geholfen!!!!
Jetzt kann ich sogar größere Dateien als 16 MB einlesen!!! Danke!!!!!
Edit: Noch eine Frage. Wie mache ich es am schlausten dass ich das Byte Array in ein int Array umwandle? Also jedes int Array element soll ein Byte der Datei repräsentieren zwischen 0 und 255.