Hallo, was ist denn die schmerzloseste Möglichkeit, in c++ Dateien zu schreiben, die größer als 2 GB sind? Die Daten werden sequenziell geschrieben. Bislang hatte ich viele 2 GB Dateien, die dann im zweiten Schritt einfach aneinandergehängt wurden. Kai
Moin moin, Am Thursday 06 November 2003 10:16 schrieb Kai Lindenberg:
was ist denn die schmerzloseste Möglichkeit, in c++ Dateien zu schreiben, die größer als 2 GB sind? Die Daten werden sequenziell geschrieben. Bislang hatte ich viele 2 GB Dateien, die dann im zweiten Schritt einfach aneinandergehängt wurden.
AFAIK ist das eine Beschränkung des darunter liegenden OS'ses. Linux sollte das mittlerweile können... Mit perl habe ich es eben getestet: ------------------------- #!/usr/bin/perl use warnings; use strict; open(FH,">> ./bigfile") or die $!; for(my $i=0; $i < 5999999;$i++) { print FH "Ein string sdfsdfsd dfssdff fsfs sf f f fs \n"; } close(FH); ------------------------- IMO kannst Du z.B. in einer Schleife solange schreiben, wie platz auf der HDD ist. Das geht mit C++ genauso ... Ob das gut ist, weiss ich nicht. Ich z.B. habe keine Streamer für Backup'S. Darum sind meine File nie grösser als 650mb. Der einzige Nachteil von grossen Dateien ist IMHO das sie einfach schlechter zu handhaben sind (mv,..., etc) Ciao Andre
Moin Andre, Am Donnerstag, 6. November 2003 11:15 schrieb Andre Heine:
Am Thursday 06 November 2003 10:16 schrieb Kai Lindenberg:
was ist denn die schmerzloseste Möglichkeit, in c++ Dateien zu schreiben, die größer als 2 GB sind? Die Daten werden sequenziell geschrieben. Bislang hatte ich viele 2 GB Dateien, die dann im zweiten Schritt einfach aneinandergehängt wurden.
AFAIK ist das eine Beschränkung des darunter liegenden OS'ses. Linux sollte das mittlerweile können...
das funktioniert auch, ich kann z.B. mit $ echo "viele Zeichen" >> große_Datei noch Zeichen anhängen, allerdings bricht mein c++ Programm bei 2 GB ab, ich verwende einen std::ofstream und gcc 3.2.3.
Mit perl habe ich es eben getestet:
das geht bei mir auch.
IMO kannst Du z.B. in einer Schleife solange schreiben, wie platz auf der HDD ist. Das geht mit C++ genauso ...
will bei mir aber nicht.
Ob das gut ist, weiss ich nicht. Ich z.B. habe keine Streamer für Backup'S. Darum sind meine File nie grösser als 650mb.
Der einzige Nachteil von grossen Dateien ist IMHO das sie einfach schlechter zu handhaben sind (mv,..., etc)
das ist wahr, es sind aber Simulationsdaten, die ich zur Auswertung in einer Datei brauche. Kai
Hi, On Thu, 6 Nov 2003, Kai Lindenberg wrote:
noch Zeichen anhängen, allerdings bricht mein c++ Programm bei 2 GB ab, ich verwende einen std::ofstream und gcc 3.2.3.
Yep. Das ist eine Limitierung in der libstdc++ der alten GCC Versionen. Das wurde erst vor etwa zwei Wochen gefixt (natuerlich nur fuer neue GCC Versionen). I.e. mit libstdc++ hast du verloren, nimm stattdessen die normalen libc Funktionen. Ciao, Micha.
Hi Michael, Am Donnerstag, 6. November 2003 14:48 schrieb Michael Matz:
On Thu, 6 Nov 2003, Kai Lindenberg wrote:
noch Zeichen anhängen, allerdings bricht mein c++ Programm bei 2 GB ab, ich verwende einen std::ofstream und gcc 3.2.3.
Yep. Das ist eine Limitierung in der libstdc++ der alten GCC Versionen. Das wurde erst vor etwa zwei Wochen gefixt (natuerlich nur fuer neue GCC Versionen). I.e. mit libstdc++ hast du verloren, nimm stattdessen die normalen libc Funktionen.
Ich habe die Changelogs von GCC 3.3.2 durchsucht, aber leider keinen Hinweis darauf gefunden, hast du einen Link? Kai
Hi, On Thu, 6 Nov 2003, Kai Lindenberg wrote:
Yep. Das ist eine Limitierung in der libstdc++ der alten GCC Versionen. Das wurde erst vor etwa zwei Wochen gefixt (natuerlich nur fuer neue GCC Versionen). I.e. mit libstdc++ hast du verloren, nimm stattdessen die normalen libc Funktionen.
Ich habe die Changelogs von GCC 3.3.2 durchsucht,
Neue GCC Version heisst in diesem Kontext CVS HEAD, i.e. das was mal 3.4 werden wird. Ciao, Micha.
Am Donnerstag, 6. November 2003 18:09 schrieb Michael Matz:
Hi,
On Thu, 6 Nov 2003, Kai Lindenberg wrote:
Yep. Das ist eine Limitierung in der libstdc++ der alten GCC Versionen. Das wurde erst vor etwa zwei Wochen gefixt (natuerlich nur fuer neue GCC Versionen). I.e. mit libstdc++ hast du verloren, nimm stattdessen die normalen libc Funktionen.
Ich habe die Changelogs von GCC 3.3.2 durchsucht,
Neue GCC Version heisst in diesem Kontext CVS HEAD, i.e. das was mal 3.4 werden wird.
ok, danke. CVS Versionen kommen für diese Sache nicht in frage. Vielen Dank. Kai
Moin moin, Am Friday 07 November 2003 09:30 schrieb Kai Lindenberg:
Am Donnerstag, 6. November 2003 18:09 schrieb Michael Matz:
On Thu, 6 Nov 2003, Kai Lindenberg wrote:
Yep. Das ist eine Limitierung in der libstdc++ der alten GCC Versionen. Das wurde erst vor etwa zwei Wochen gefixt (natuerlich nur fuer neue GCC Versionen). I.e. mit libstdc++ hast du verloren, nimm stattdessen die normalen libc Funktionen.
Ich habe die Changelogs von GCC 3.3.2 durchsucht,
Arrgh... Sorry, wusste ich auch nicht so genau. Ich habe echt angenommen, das das mit C++ funtkionieren müsste ;( Ciao Andre
Michael Matz schrieb:
Hi,
On Thu, 6 Nov 2003, Kai Lindenberg wrote:
noch Zeichen anhängen, allerdings bricht mein c++ Programm bei 2 GB ab, ich verwende einen std::ofstream und gcc 3.2.3.
Yep. Das ist eine Limitierung in der libstdc++ der alten GCC Versionen. Das wurde erst vor etwa zwei Wochen gefixt (natuerlich nur fuer neue GCC Versionen). I.e. mit libstdc++ hast du verloren, nimm stattdessen die normalen libc Funktionen.
Das ist ja scheiße :-( Gilt das auch für <ifstream>? Ich denke mal schon oder? Wenn dem so ist, bleibt mir wohl nichts anderes übrig als fopen() und Co. zu verwenden. Viele Grüße Bastian
Kai Lindenberg schrieb:
Hallo,
was ist denn die schmerzloseste Möglichkeit, in c++ Dateien zu schreiben, die größer als 2 GB sind? Die Daten werden sequenziell geschrieben. Bislang hatte ich viele 2 GB Dateien, die dann im zweiten Schritt einfach aneinandergehängt wurden.
Kai
Hallo Kai, die Standard I/O Klasse <fstream> sollte das können. Auf meiner Maschine sind damit 2^128 Bits, das sind ca. 340 * 10^36 Bits, adressierbar. Viele Grüße Bastian
Hi Bastian, Am Donnerstag, 6. November 2003 11:24 schrieb Bastian Schern:
Kai Lindenberg schrieb:
was ist denn die schmerzloseste Möglichkeit, in c++ Dateien zu schreiben, die größer als 2 GB sind? Die Daten werden sequenziell geschrieben. Bislang hatte ich viele 2 GB Dateien, die dann im zweiten Schritt einfach aneinandergehängt wurden.
die Standard I/O Klasse <fstream> sollte das können. Auf meiner Maschine sind damit 2^128 Bits, das sind ca. 340 * 10^36 Bits, adressierbar.
die verwende ich ja: #include <fstream> std::ofstream trackfile; trackfile << aTrack->GetKineticEnergy()/keV << " " << std::fixed << position.theta() << " " << aTrack->GetTrackID() << " " << pname << G4endl; Kai
participants (4)
-
Andre Heine
-
Bastian Schern
-
Kai Lindenberg
-
Michael Matz