FileHandling
-
Hallo C++ -Freunde,
ich wäre für ein kleines Beispiel dankbar
!
Aus einer Binärdatei muss jeder zweite Datensatz (Struktur mit 3 Elementen) ausgelesen werden.
Jedoch soll vorher der verfügbare Hauptspeicherplatz geprüft werden. Die selektierten Datensätze sollen dann in einen Puffer geschrieben werden, der den halben Hauptspeicherplatz belegt. Sobald der Puffer voll ist ...Ausgabe, anschließend neu (solange bis alle Datensätze ausgelesen sind).Gruß
Horst
-
Original erstellt von <Horst>:
Hallo C++ -FreundeWer C++ programmiert ist noch lange kein Freund von C++ (o;
Schau dir mal die Klasse fstream an. (STL) Und dann gibts noch den FAQ-Artikel "Ströme und Dateien in C++" (o;
-junix
-
.... hab soeben nachgeschaut. Über (Haupt-) Speicherplatzabfrage steht da nichts. Auch was den "Pufferüberlauf" betrifft... Fehlanzeige.
Die Antwort war wirklich sehr "QUICK".
-
pufferüberlauf solltest du nicht haben, wenn du genau weist, wieviele bytes du einliest und wie groß deine zielstruktur ist. überprüfen ob genug hauptspeicher da ist? hm, vermute mal, dass es da betriebssystemcalls gibt (also im jeweiligen bs-forum fragen)
normalerweise sind die einzulesenden strukturen relativ klein
-
Was verstehst Du unter Hauptspeicherabfrage und Überlauf ?!
Du kannst mit new speicher anfordern. Wenn das nicht klappt wird.
try { int * i = NULL; i = new int[1000000000]; } catch(bad_alloc) { // Das war nix. Vorsicht bei Meldungsausgaben, die können ggf, auch kein Speicher mehr haben und erneut eine Exception werfen! }
Desweiteren kannst Du mit set_new_handler eine Routine schreiben die vor der Excpetion von new aufgerufen wird wenn der Speicher zu knapp wird.
(z.B. kannst Du bei Programmstart was reservieren und frei geben wenn der Speicher knapp würde....)
Überlaufsprüfung: Gibts in diesem Sinne nicht. Du musst selbst dafür sorgen das DU ausreichend platz für die Daten hälst. (STL Container oder char * im lowlevel).
Bin binärzeugs hab ich aber wenig erfahrung.
seekg und tellg können DIr bei der bestimmung der Dateigröße helfen.
Ahso:
Ich hab die erfahrung gemacht das ich unter windows noch kein bad_alloc gesehen hab. Nach ner meldung vom OS das nix mehr da ist war schluss. (Das ist aber wohl abhängig vom compiler ;o)[ Dieser Beitrag wurde am 22.04.2003 um 10:06 Uhr von Knuddlbaer editiert. ]
-
Original erstellt von <Horst>:
Die Antwort war wirklich sehr "QUICK".Nojo der Thread heisst "File Handling" und das Filehandling wird in der FAQ gut erklärt (o;
Ich glaube dein Hauptproblem ist (und daszeigt auch deine Frage), dass du dein Problem nicht Teilprobleme unterteilst. Das Einlesen aus einer Datei hat ja nix mit dem Hauptspeicher zu tun? (oder nur Wenig) und ebensowenig mit dem Zwischenspeichern oder ausgeben. Ich denke du solltest dich mal hinsetzen und alle Teilprobleme aufschreiben, sie entsprechend in Klassen teilen und dann wieder nach Lösungen suchen.
-junix
-
... der verfügbare Hauptspeicherplatz soll geprüft werden.
Wenn mir das jemand zeigen könnte wäre mir schon geholfen
-
Original erstellt von <Horst>:
**... der verfügbare Hauptspeicherplatz soll geprüft werden.Wenn mir das jemand zeigen könnte wäre mir schon geholfen :-)**
auf welchen betriebssystem?
-
Windose ME