Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Insgesamt 17 Stimmen
12%
Ja, die meisten sind qualvoll schwer! (2)
59%
Die meisten sind "schwer" im Sinne von.. "ich kapier's, aber ich brauch sehr lange für die Lösung" (10)
18%
Die meisten sind leicht. Nur wenige ham's in sich. (3)
12%
Nope, echt easy und leicht verständlich! (2)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
bool status=0; int Cursor_pos = 0; char sBuffer[] = ""; void* pBuffer = NULL; pBuffer = &sBuffer; // TriBase-Engine initialisieren tbInit(); tbVFile* pFile=new tbVFile; do { if(pFile->Init("test.txt")) { tbWriteToLog("Fehler beim Lesen der Datei!"); } else { int File_size = pFile->GetSize(); tbWriteToLog("Die Datei wurde erfolgreich eingelesen. Groesse: %d Byte", File_size); //not necessarily needed //pFile->Seek(TB_VFSO_START,0); // read x characters from file and store into sBuffer // insert into sBuffer[0], sBuffer[1], ... sBuffer[x-1] pFile->Read(2,pBuffer); // getting size of Array doesnt work properly! int BufferGroesse = strlen(sBuffer); tbWriteToLog("Buffergröße: %d", BufferGroesse); // because array begins at 0, we have to break if k = BuffSize for (int k=0;k<BufferGroesse;k++) tbWriteToLog("Feld %d: %c", k, sBuffer[k]); status=1; } |
Zitat
...
Buffergröße: 4
Feld 0: c
Feld 1: d
Feld 2: Ì
Feld 3: Ì
Die Datei "copy.txt" wurde erfolgreich geschrieben.
...
Quellcode |
|
1 |
memcpy(pOut, (BYTE*)(m_pBuffer) + m_iCursor, iNumBytes); |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
bool status=0; int Cursor_pos = 0; char sBuffer[] = ""; //Der Puffer ist 1Byte groß, er besteht nur aus '\0' bzw 0 void* pBuffer = NULL; //unsinnig da du danach eh direkt nen Wert zuweist pBuffer = &sBuffer; //zeigt nun auf deinen 1Byte großen Puffer // TriBase-Engine initialisieren tbInit(); tbVFile* pFile=new tbVFile; do { if(pFile->Init("test.txt")) { tbWriteToLog("Fehler beim Lesen der Datei!"); } else { int File_size = pFile->GetSize(); tbWriteToLog("Die Datei wurde erfolgreich eingelesen. Groesse: %d Byte", File_size); //not necessarily needed //pFile->Seek(TB_VFSO_START,0); // read x characters from file and store into sBuffer // insert into sBuffer[0], sBuffer[1], ... sBuffer[x-1] pFile->Read(2,pBuffer); //Wie willst du 2Byte in einen 1Byte großen Buffer lesen?! // getting size of Array doesnt work properly! int BufferGroesse = strlen(sBuffer); //Das ist kein String sondern ein Puffer mit der größe 1 tbWriteToLog("Buffergröße: %d", BufferGroesse); // because array begins at 0, we have to break if k = BuffSize for (int k=0;k<BufferGroesse;k++) //Das funktioniert aus dem oben genannten Grund nicht //Das einzige gültige Element ist sBuffer[0] tbWriteToLog("Feld %d: %c", k, sBuffer[k]); status=1; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
bool status=0; int Cursor_pos = 0; char sBuffer[ 24 ]; //Puffer mit 24Bytes platz void* pBuffer = reinterpret_cast< void* >( sBuffer ); //Der Zeiger auf den Puffer // TriBase-Engine initialisieren tbInit(); tbVFile* pFile=new tbVFile; do { if( pFile->Init( "test.txt" ) ) { tbWriteToLog( "Fehler beim Lesen der Datei!" ); } else { int File_size = pFile->GetSize(); tbWriteToLog( "Die Datei wurde erfolgreich eingelesen. Groesse: %d Byte", File_size ); int BufferGroesse = 0; //Noch ist der Puffer leer if( pFile->Read( 2, pBuffer ) == TB_OK ) //2Bytes einlesen BufferGroesse = 2; //Nur wenn der Lesevorgang erfolgreich war die Puffergröße ändern tbWriteToLog("Buffergröße: %d", BufferGroesse); // because array begins at 0, we have to break if k = BuffSize for ( int k = 0; k < BufferGroesse; k++ ) tbWriteToLog("Feld %d: %c", k, sBuffer[k]); status=1; } //Da ich dein Beispiel verwendet habe endet hier meine Änderung, da ich nicht weiß wie es bei dir weitergeht. |
C-/C++-Quelltext |
|
1 2 |
if( pFile->Read( 2, pBuffer ) == TB_OK ) //2Bytes einlesen BufferGroesse = 2; //Nur wenn der Lesevorgang erfolgreich war die Puffergröße ändern |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
bool status=0; const int set = 5; // Number of Characters const float min_length = 0.0; // Minimum Length of Vectors const float max_length = 10.0; // Maximum Length of Vectors int Cursor_pos = 0; int Zahl = 0; char sBuffer[] = ""; int BufferGroesse = 0; //instead of this here.... //void* pBuffer = NULL; //pBuffer = &sBuffer; //....use casted pointer to sBuffer void* pBuffer = reinterpret_cast< void* >( sBuffer ); // TriBase-Engine initialisieren tbInit(); tbVFile* pFile=new tbVFile; do { if(pFile->Init("test.txt")) { tbWriteToLog("Fehler beim Lesen der Datei!"); } else { int File_size = pFile->GetSize(); tbWriteToLog("Die Datei wurde erfolgreich eingelesen. Groesse: %d Byte", File_size); //not necessarily needed //pFile->Seek(TB_VFSO_START,0); Cursor_pos = pFile->GetCursor(); tbWriteToLog("Der Cursor steht auf Position %d", Cursor_pos); // read "set"-many characters from file and store into sBuffer // insert into sBuffer[0], sBuffer[1], ... sBuffer[set-1] if( pFile->Read( set, pBuffer ) == TB_OK ) BufferGroesse = set; // this doesnt work... you wont get proper size of sBuffer-Array //BufferGroesse = strlen(sBuffer); tbWriteToLog("Buffergröße: %d", BufferGroesse); // because array begins at 0, we have to break if k = BuffSize for (int k=0;k<BufferGroesse;k++) tbWriteToLog("Feld %d: %c", k, sBuffer[k]); status=1; } }while(status==0); if(pFile->SaveToFile("copy.txt")) { tbWriteToLog("Fehler beim Schreiben der Datei!"); } else { tbWriteToLog("Die Datei \"copy.txt\" wurde erfolgreich geschrieben."); } |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// ****************************************************************** // Lesen aus einer virtuellen Datei tbResult tbVFile::Read(int iNumBytes, void* pOut) { // Parameter prüfen if(iNumBytes == 0) return TB_OK; if(iNumBytes < 0) TB_ERROR_INVALID_VALUE("iNumBytes", TB_ERROR); if(pOut == NULL) TB_ERROR_NULL_POINTER("pOut", TB_ERROR); BOOL bError = FALSE; // Überschreitet der Lesevorgang das Dateiende? if(m_iCursor + iNumBytes > m_iSize) { // Das Ende der Datei ist überschritten - das wird vermerkt! // Die Anzahl der zu lesenden Bytes muss angepasst werden. iNumBytes = m_iSize - m_iCursor; bError = TRUE; } // Daten kopieren und den Lesezeiger weiterbewegen memcpy(pOut, (BYTE*)(m_pBuffer) + m_iCursor, iNumBytes); m_iCursor += iNumBytes; if(m_iCursor >= m_iSize) m_bEOF = TRUE; // Wurde das Ende der Datei weit überschritten, so wird ein Fehlercode // zurückgeliefert. return bError ? TB_ERROR : TB_OK; } |
Werbeanzeige