Daten lesen + schreiben
-
Hallo mal wieder an die Programmierer unter euch!
Und zwar hab ich folgendes Problem: In dem unteren Quellcode wird die aktuelle Datei ermittelt, geöffnet und anschließend werden 10 Bytes eingelesen. Und da ist das Problem. Ich kann die Bytes nicht einlesen bzw. nicht die 10. Meine Theorien: Es tritt ein '\0' auf und wird deswegen nicht fortgesetzt, oder auf die naechsten Bytes kann nicht zugegriffen werden, oder ich habe die falschen Flags gesetzt (weiß aber sonst nicht welche), d.h. es werden nur Daten gelesen, die textbasierend sind aber ich will binär lesen (und schreiben).
So, vielleicht weiß einer von euch, wo das Problem liegt und kann mir weiterhelfen. Vielleicht gehts auch mit einer anderen Funktion (statt CFile).Mein Quellcode:
// Deklaration CString cstrCurrentFileName; HANDLE hOpenFile; char cDataBuffer[0xFF]; // Aktuelle Datei ermitteln und speichern (cstr_CurrentFileName) cstrCurrentFileName = GetCommandLine(); cstrCurrentFileName.Delete(0); cstrCurrentFileName.Delete(cstrCurrentFileName.GetLength() - 1); // Datei öffnen und HANDLE speichern hOpenFile = CreateFile( cstrCurrentFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); // CFile - Read CFile cFile((int) hOpenFile); cFile.Read(cDataBuffer, 10); // erstmal 10 Bytes einlesen MessageBox(cDataBuffer); // HANDLE schließen CloseHandle(hOpenFile);Danke für Hilfe, Tipps und Anregungen
Cu CaseModder

-
schau ir mal CFile in der MSDN an. Das sollte dir weiterhelfen.
-
Also ich würde statt char lieber BYTE nutzen. Wenn du das char Array ausgeben lässt wird natürlich bei einen "\0" gestoppt...
Hast du dir den Inhalt der Variable mal im Debugger angeschaut?
-
@ rene04
Ich hab doch schon in dor MSDN gesucht!
Aber wahrscheinlich is da doch ein '\0' am Anfang der Datei und wird blos in der MessageBox() falsch angezeigt. Ist wahrscheinlich schon alles im Datenfeld. Werds heut nochmal schreiben mit Write() und dann mal gucken, obs stimmt...Cu CaseModder

-
@ the_alien
Werde mir den Inhalt der Variable mal im Debugger angucken, wenn du mir sagst wie das funktioniert.
Is en BYTE nich ne Abkapslung von char? En char kann doch 0xFF Zeichen aufnehmen. Das reicht doch auch, oder? Ein Byte sind doch 8 Bit = 0xFF = 255 + 1 Zeichen (reicht doch nach der Code-Tabelle)???
Danke trotzdem
Cu CaseModder

-
Ich dachte nur es wäre einfacher die Daten die du ja Binär benötigst auch direkt Binär und Byteweise abzuspeichern.
Setz doch einfach mal auf die Zeile der MessageBox einen Breakpoint. Wenn du jetzt den Mauszeiger im Visual Studio über die Variable cDataBuffer hälst solltest du den Inhalt sehen können.
Was mir noch nicht so ganz klar ist:
Wieso reservierst du dir 255 Bytes Speicher für cDataBuffer? 10 Bytes würden doch locker reichen, zumal du sowieso nur 10 einliest.
-
// Sorry Doppelpost. Kann gelöscht werden