000
02.09.2008, 02:05 Uhr
~FunMaker
Gast
|
ich habe folgendes Problem: Ich habe eine Datei die mit (mir bekannten) Daten gefüllt ist ---------------- Nun lese ich die Daten aus, das funktioniert auch soweit ganz gut bis ich auf irgendein Sonderzeichen stoße - dann bricht das Lesen der Datei ab so als wäre das Zeichen eine Art EOF Zeichen.
- FAString besteht immer aus 4Bytes Integer (Länge des Strings) und dem String
Hier das Format:
4 Byte ----- Länge von Chararray: V Byte ----- Chararray
1 Byte -----byte
4 Byte ------ integer 4 Byte ------ integer
4 Byte ------ integer 4 Byte ------ integer
4 Byte ------ integer 4 Byte ------ integer (größe der PNG Datei) X Byte ------ PNG-Datei innerhalb dieser Datei
Code: |
CAIPReader::CAIPReader(std::string FileName) { this->CFileIO::CFileIO(FileName);
std::string AIP_String = ReadFAString(); //OK byte Type = ReadByte(); //OK int Height = ReadInteger(); //OK int Width = ReadInteger(); //OK int SingleHeight = ReadInteger(); //OK int SingleWidth = ReadInteger(); //OK int FrameCount = ReadInteger(); //OK
//Hier PNG Load //>>>>>>>>>>>>>
int PNGSize = ReadInteger(); //OK
byte *PNGFile; PNGFile = new byte[PNGSize]; ReadFile(PNGFile,PNGSize); //NICHT OK, anstatt 1454 Bytes liest er nur 5 //<<<<<<<<<<<<< }
CFileIO::CFileIO(std::string &FileName) { Stream = new std::fstream(); Stream->open(FileName.c_str(),std::ios_base::in || std::ios_base::out || std::ios_base::binary); }
byte CFileIO::ReadByte() { char memblock; Stream->read(&memblock,1); return (byte) memblock; }
int CFileIO::ReadInteger() { char memblock[4]; Stream->read(memblock,4); int Output; CopyMemory(&Output, memblock,4); return Output; }
std::string CFileIO::ReadFAString() { //length char memblock[4]; Stream->read(memblock,4); int Count; CopyMemory(&Count,memblock,4);
//String char *Str; Str = new char[Count]; Stream->read(Str,Count); std::string Output = "";
for (int i = 0; i < Count ; i++) { Output = Output + Str[i]; }
delete[] Str; return Output; }
void CFileIO::ReadFile(void* Buffer, int Size) {
int bla = Stream->readsome((char*) Buffer,Size); //bestimmtes Zeichen lässt Datei "Enden" - dadurch nur Mist und eof und sonstwas if (bla < Size) Global->Error("Hier zuwenig gelesen");
}
|
und hier die Datei die ich lesen will (HEX da ganz viele Sonderzeichen nicht als Text im Forum benutzt werden können)
Code: |
00000000h: 04 00 00 00 54 65 73 74 01 80 00 00 00 80 00 00 00000010h: 00 40 00 00 00 40 00 00 00 04 00 00 00 AE 05 00 00000020h: DB C7 BD B9 6A 00 89 50 4E 47 0D 0A 1A 0A 00 00 00000030h: 00 0D 49 48 44 52 00 00 00 80 00 00 00 80 08 06 00000040h: 00 00 00 C3 3E 61 CB 00 00 05 75 49 44 41 54 78 ....
|
das es ein Zeichen ist was das ganze auslößt ist nur eine starke Vermutung da wenn ich das Zeichen rauslösche er mehr bytes liest |