Hallo Leute,
ich möchte in C++ mit einem ifstream Daten aus einer sehr großen Ascii-Datei (3,17 GB) auslesen. Die Datei enthält unmengen Integer-Werte, nicht binär codiert, sondern als Ascii-Zeichen, also "menschenlesbar".
Bei einem Testlauf meines Codes habe ich festgestellt, dass bei ca. 2 GB Schluss ist mit Stream lesen, logischerweise beim höchsten Wert, der mit 32 bit adressierbar ist. Nun muss es aber möglich sein, auch darüber hinaus zu adressieren, ein 32-bit XP oder Linux kommen schließlich auch mit so einer Datei klar.
Ein Blick in die Boost-Lib hat mich leider nicht weiter gebracht. Es ist auch gar nicht so leicht, Google(TM) beizubringen, was ich eigentlich suche
. Muss ich einen System-Fork mit dem Präprozessor machen und die System-APIs nutzen? Das wäre für so ein Freizeitprojekt nicht allzuviel Aufwand, aber geht das nicht auch plattformunabhängig?
Mein Code ist bei der Frage eigentlich irrelevant, ich poste aber mal die relevanten Teile.
Schönes Wochenende wünsch ich euch.
Gruß, Traveller
Nachtrag: Falls sich jemand wundert, es handelt sich um SRTM-Daten.
http://de.wikipedia.org/wiki/SRTM-Daten
ich möchte in C++ mit einem ifstream Daten aus einer sehr großen Ascii-Datei (3,17 GB) auslesen. Die Datei enthält unmengen Integer-Werte, nicht binär codiert, sondern als Ascii-Zeichen, also "menschenlesbar".
Bei einem Testlauf meines Codes habe ich festgestellt, dass bei ca. 2 GB Schluss ist mit Stream lesen, logischerweise beim höchsten Wert, der mit 32 bit adressierbar ist. Nun muss es aber möglich sein, auch darüber hinaus zu adressieren, ein 32-bit XP oder Linux kommen schließlich auch mit so einer Datei klar.
Ein Blick in die Boost-Lib hat mich leider nicht weiter gebracht. Es ist auch gar nicht so leicht, Google(TM) beizubringen, was ich eigentlich suche

Mein Code ist bei der Frage eigentlich irrelevant, ich poste aber mal die relevanten Teile.
Code:
char *path = "C:\\foo.asc";
std::ifstream ifsFoo(path, std::ios::in);
if (!ifsFoo)
return -1;
int bufSize = 1024;
char buffer[bufSize];
while (ifsFoo.good())
{
std::cout << "Streamposition: " << ifsFoo.tellg() << std::endl;
ifsFoo.get(buffer, bufSize);
}
ifsFoo.close();
Schönes Wochenende wünsch ich euch.
Gruß, Traveller
Nachtrag: Falls sich jemand wundert, es handelt sich um SRTM-Daten.
http://de.wikipedia.org/wiki/SRTM-Daten
Zuletzt bearbeitet: