C++ Kb weise von einer Datei einlesen

paul10

Mitglied
Hallo,
ich wollte mal fragen ob man einstellen kann wieviel kb pro Schleifendurchlauf von einer
Datei eingelesen werden?

oder wenn es nicht mit fstream geht wie dann?

ich hoffe ihr könnt mir helfen!

Danke
Gruß
 
Moin,

was meinst Du genau ? ?

In einer Schleife macht es allenfalls Sinn, wenn Du zeilenweise einlesen willst ...

Lies einfach solang ein, wie "Daten da sind" - sprich: bis das Ende der Datei (eof) erreicht ist ! !

Warum willst Du dies kB-weise einschränken
Geht auch meines Wissens nicht .... ;-]

Oder poste mal Deinen Code, damit man sehen kann, was Du eigentlich vorhast !

Gruß
Klaus
 
Hallo,
danke für die Antworten

also eigentich wollte ich einfach einen String aus einer exe Datei auslesen, aber irgendwie war der string nach ca 200 Zeichen leer ... und wurde nicht weiter gefüllt

und deshalb hätte ich noch eine frage

Wie kann ich einen String aus einer exe datei auslesen?

Was ich bereits versucht habe :

einlesen mit getline() ( von der klasse string) und dann alles in einen string gespeichert
dann mit find () in diesem string gesucht -> nicht gefunden

dann hab ich noch alles in ein char* einlesen lassen und dann mit strstr versucht zu finden auch das schlug fehl

dann hab ich es mit dem Compiler im Singelstepmodus versucht und dort ist dann gestanden zb. [0x12] = 0x65 'e' [0x3] = 0x0 [0x8] = 0x20 ' ' [0x6] = 0x74 't' [0xa] = 0x6f 'o'

also waren noch zeichen im string die ich nicht wollte -> 0x20 und 0x0

und wie muss ich das jetzt machen wenn ich nach dem string suchen will?

muss ich dann nach dem suchen : e \0x0 \0x8 \0x20 t \0x20 o

das hab ich aber schon probiert und ging nicht...

dann hab ich noch das probiert :
\0x65 \0x8 \0x20 \0x74 \0x20 \0x6f


bin schon echt verzweifelt :(
hoffe ihr könnt mir helfen

Danke
Gruß
 
Wieso sollte das nicht gehen? Man kann doch beispielsweise bei read angeben, wie viele Zeichen eingelesen werden sollen.

Moin Matthias,

ok, da hast Du auch wieder Recht! :suspekt: Da habe ich zu kompliziert gedacht ...

Ich nutze das in gewisser Weise sogar selbst; allerdings bestimme ich vorher über SEEK_END die einzulesende Datenlänge und lese die dann in einem Rutsch in einen stream ein ...

@ Paul10: Deinen zweiten Post habe ich ehrlich gesagt nicht verstanden .....

Gruß
Klaus
 
Hi.
Wie kann ich einen String aus einer exe datei auslesen?

Was ich bereits versucht habe :

einlesen mit getline() ( von der klasse string) und dann alles in einen string gespeichert
dann mit find () in diesem string gesucht -> nicht gefunden

dann hab ich noch alles in ein char* einlesen lassen und dann mit strstr versucht zu finden auch das schlug fehl

dann hab ich es mit dem Compiler im Singelstepmodus versucht und dort ist dann gestanden zb. [0x12] = 0x65 'e' [0x3] = 0x0 [0x8] = 0x20 ' ' [0x6] = 0x74 't' [0xa] = 0x6f 'o'

also waren noch zeichen im string die ich nicht wollte -> 0x20 und 0x0
Erstmal mußt du die Datei im Binärmodus öffnen.

Dann mußt du die Daten mit einer unformatierten Eingabeoperation auslesen, also nicht mit den >> Operatoren sondern mit istream::read().
C++:
typedef unsigned char byte;
std::ifstream file("abc.exe", std::ios::in | std::ios::binary);
const size_t size = 1024;
byte buf[size];

if (file.read(reinterpret_cast<char*>(buf), size)) {
  const byte search[] = { 0x65, 0x8, 0x20, 0x74, 0x20, 0x6f };
  
  byte* p = std::search(buf, buf + size, search, search + sizeof(search)/sizeof(*search));
 
  if (p != (buf + size)) {
      // found!
  }
}

Gruß
 
Zuletzt bearbeitet:
@vfl_freak:
ich möchte einfach einen String aus einer Datei auslesen... so wie es deepthroat auch gemacht hat...

@deepthroat:
die Methode funktionierte nur als ich es bei einer kleine Datei versucht habe, bei der gr0ßen wurde nur Müll ausgegeben, wie kann das sein?

Was könnte der Fehler sein?

auf jeden fall mal danke für eure Hilfe !

Gruß
 
Hi.
die Methode funktionierte nur als ich es bei einer kleine Datei versucht habe, bei der gr0ßen wurde nur Müll ausgegeben, wie kann das sein?
Ganz einfach: du hast etwas falsch gemacht oder du interpretierst die Daten falsch.

Zeig deinen Code (Minimalbeispiel!) und entsprechende Eingabedaten. Schreibe dazu was du für eine Ausgabe erwartest und was stattdessen ausgegeben wird.

Gruß
 
Zurück