c++ schreibt nicht in datei
-
- Beiträge: 1765
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: c++ schreibt nicht in datei
Button </> verwendet
Hoffe, es ist jetzt besser lesbar
Das Programm erzeugt wie gewünscht eine Datei (z.B. "datei.txt"), die keinen Inhalt hat mit der Größe 0
Hoffe, es ist jetzt besser lesbar
Das Programm erzeugt wie gewünscht eine Datei (z.B. "datei.txt"), die keinen Inhalt hat mit der Größe 0
Es gibt viele Foren
Re: c++ schreibt nicht in datei
Ja, so ist das definitiv besser lesbar.
Dein Problem ist allerdings immer noch dasselbe: Du benutzt in deiner Funktion writerec die Klassenvariable datei, den fstream dahinter öffnest du allerdings nie mit einem Dateinamen.
Schritt für Schritt:
In der Funktion writerec benutzt du die Klassenvariable datei, um in eine Datei zu schreiben:
In der Funktion open_file öffnest du allerdings nicht die Datei mit Hilfe der Variable datei, sondern mit einer lokalen Variable f:
Zum Ausprobieren: Innerhalb der Funktion open_file kannst du mit Hilfe von f in deine Datei schreiben:
Damit du die Variable datei zum Schreiben benutzen kannst, musst du die Datei mit der Variablen datei öffnen:
Hinweis am Rande: Deine Telefonnummer musst du uns nicht verraten
Dein Problem ist allerdings immer noch dasselbe: Du benutzt in deiner Funktion writerec die Klassenvariable datei, den fstream dahinter öffnest du allerdings nie mit einem Dateinamen.
Schritt für Schritt:
In der Funktion writerec benutzt du die Klassenvariable datei, um in eine Datei zu schreiben:
Code: Alles auswählen
class rec_oop_file_class
{
[…]
public:
fstream datei;
[…]
};
void rec_oop_file_class::writerec()
{
[…]
datei << left << setw(rec.feld_nachname_breite) << rec.feld_nachname_string;
datei << left << setw(rec.feld_vorname_breite) << rec.feld_vorname_string;
datei << left << setw(rec.feld_telefon_breite) << rec.feld_telefon_string;
}
In der Funktion open_file öffnest du allerdings nicht die Datei mit Hilfe der Variable datei, sondern mit einer lokalen Variable f:
Code: Alles auswählen
void rec_oop_file_class::open_file(string para_dateiname_string)
{
/* Du benutzt diese Variable um die Datei zu öffnen. */
fstream f;
dateiname_string = para_dateiname_string;
f.open(dateiname_string, ios::out);
[…]
/* Am Ende der Funktion wird die Variable f wieder „freigegeben“ und die Datei ist
* nirgendwo geöffnet. */
}
Zum Ausprobieren: Innerhalb der Funktion open_file kannst du mit Hilfe von f in deine Datei schreiben:
Code: Alles auswählen
void rec_oop_file_class::open_file(string para_dateiname_string)
{
fstream f;
dateiname_string = para_dateiname_string;
f.open(dateiname_string, ios::out);
f << "Diese Zeile landet in der Datei.\n";
datei << "Diese Zeile landet nirgendwo.\n";
}
Damit du die Variable datei zum Schreiben benutzen kannst, musst du die Datei mit der Variablen datei öffnen:
Code: Alles auswählen
void rec_oop_file_class::open_file(string para_dateiname_string)
{
dateiname_string = para_dateiname_string;
datei.open(dateiname_string, ios::out);
datei << "Jetzt landet diese Zeile in deiner Datei.\n";
}
Hinweis am Rande: Deine Telefonnummer musst du uns nicht verraten
Code: Alles auswählen
int main()
{
[…]
f.set_vars("Zahlhaas", "Manfred", "69XXXXX");
[…]
}
Manchmal bekannt als Just (another) Terminal Hacker.
-
- Beiträge: 1765
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: c++ schreibt nicht in datei
Damm wären das die Änderungen, stimmt?
Code: Alles auswählen
void rec_oop_file_class::open_file(string para_dateiname_string)
{
fstream datei;
dateiname_string = para_dateiname_string;
datei.open(dateiname_string, ios::out);
datei << "Jetzt landet diese Zeile in deiner Datei.\n";
}
Es gibt viele Foren
- king-crash
- Beiträge: 722
- Registriert: 08.08.2006 12:07:56
- Lizenz eigener Beiträge: MIT Lizenz
Re: c++ schreibt nicht in datei
Kurz gesagt, nein.
So wie es aussieht fehlt dir das grundlegende Verständnis von C++. Ich empfehle dringend mit Basics anzufangen.
Und spar dir doch bitte die ständigen Leerzeilen. Selten habe ich so etwas lästiges gesehen
wird immer wahr sein, da der c++ Compiler das Objekt mit irgend etwas != 0 angelegt hat.
Was du meintest ist höchstwahrscheinlich:
In deinem letzten Verbesserungsversuch erzeugst du mit "fstream datei;" ein lokales Objekt, das geöffnet und beschrieben wird.
Beim Verlassen der Funktion wird die Datei wieder geschlossen.
Warum das spätere Beschreiben deiner nicht geöffneten Klassenvariablen "datei" keine Exception wirft, da musst du einen C++ Experten fragen.
Was du meintest wäre dann:
Oder um es möglicherweise deutlicher zu machen:
So wie es aussieht fehlt dir das grundlegende Verständnis von C++. Ich empfehle dringend mit Basics anzufangen.
Und spar dir doch bitte die ständigen Leerzeilen. Selten habe ich so etwas lästiges gesehen
Code: Alles auswählen
if(datei)
Was du meintest ist höchstwahrscheinlich:
Code: Alles auswählen
if(datei.is_open())
Beim Verlassen der Funktion wird die Datei wieder geschlossen.
Warum das spätere Beschreiben deiner nicht geöffneten Klassenvariablen "datei" keine Exception wirft, da musst du einen C++ Experten fragen.
Was du meintest wäre dann:
Code: Alles auswählen
void rec_oop_file_class::open_file(string para_dateiname_string)
{
dateiname_string = para_dateiname_string;
datei.open(dateiname_string, ios::out);
datei << "Jetzt landet diese Zeile in deiner Datei.\n";
}
Code: Alles auswählen
void rec_oop_file_class::open_file(string para_dateiname_string)
{
dateiname_string = para_dateiname_string;
this->datei.open(dateiname_string, ios::out);
this->datei << "Jetzt landet diese Zeile in deiner Datei.\n";
}
-
- Beiträge: 1765
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: c++ schreibt nicht in datei
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include "stdio.h"
#include "string.h"
using namespace std;
//#include "/media/daten/prog/c/lib/pascal.hpp"
//#include "/media/daten/prog/c/lib/convert.hpp"
/////////////// Globale Variablen ///////////////
char debug;
struct rectype
{
string feld_nachname_string;
int feld_nachname_breite;
string feld_vorname_string;
int feld_vorname_breite;
string feld_telefon_string;
int feld_telefon_breite;
}; //rec;
/////////////// Ende Globale Variablen ///////////////
class rec_oop_file_class
{
private:
protected:
int i;
public:
fstream datei;
//protected: geht nicht
struct rectype rec;
struct rectype *recpointer;
void init_rec();
rec_oop_file_class();
~rec_oop_file_class();
void open_file(string para_dateiname_string);
void writerec();
void writerec_nr(int position);
int recsize;
void set_vars(string para_feld_nachname_string, string para_feld_vorname_string, string para_feld_telefon_string);
void show_vars();
string dateiname_string;
}; //rec_oop_file_class
void rec_oop_file_class::init_rec()
{
debug = 0;
if (debug == 1)
{
cout << "hier ist destruktor";
}
dateiname_string="dummy_file.txt";
set_vars("dummy nachname", "dummy vorname", "dummy 123");
rec.feld_nachname_breite = 20;
rec.feld_vorname_breite = 20;
rec.feld_telefon_breite = 20;
rec_size = feld_nachname_breite + feld_vorname_breite + feld_telefon_string;
} //init_rec
recsize=20+20
//----- KONSTRUKTOR ---------------------------------------
rec_oop_file_class::rec_oop_file_class()
{ //OPEN
init_rec();
debug = 0;
if (debug == 1)
{
cout << "Hier ist Konstruktor rec_oop_file_class" << endl; //debug
}
} //rec_oop_file_class::rec_oop_file_class
//----- KONSTRUKTOR ENDE ---------------------------------------
//----- DESTRUKTOR ---------------------------------------
rec_oop_file_class::~rec_oop_file_class()
{
debug = 0;
if (debug == 1)
{
cout << "hier ist destruktor";
}
datei.close();
} //rec_oop_file_class
//----- DESTRUKTOR ENDE ----------------------------------
void rec_oop_file_class::open_file(string para_dateiname_string)
{
dateiname_string = para_dateiname_string;
datei.open(dateiname_string, ios::out);
init_rec();
} //rec_oop_file_class::open_file()
//w1
void rec_oop_file_class::writerec()
{debug = 0;
if (debug == 1)
{
cout << "hier ist writerec()";
}
if (datei)
{
datei << left << setw(rec.feld_nachname_breite) << rec.feld_nachname_string;
datei << left << setw(rec.feld_vorname_breite) << rec.feld_vorname_string;
datei << left << setw(rec.feld_telefon_breite) << rec.feld_telefon_string;
}
else
cout << "writerec datei nicht offen" << endl;
} //rec_oop_file_class::writerec
void rec_oop_file_class::writerec_nr(int position)
{
debug = 1;
if (debug == 1)
{
cout << "Hier ist writerec_nr()" << endl; //debug
cout << "Hier ist writerec_nr() recsize=" << recsize << endl; //debug
cout << "Hier ist writerec_nr() position*recsize=" << position*recsize << endl; //debug
} //debug
datei.seekp(position*recsize);
writerec();
} //rec_oop_file_class_nr
void rec_oop_file_class::set_vars(string para_feld_nachname_string, string para_feld_vorname_string, string para_feld_telefon_string)
{
debug = 0;
if (debug == 1)
{
cout << "Hier ist set_vars" << endl; //debug
} //debug
rec.feld_nachname_string = para_feld_nachname_string;
rec.feld_vorname_string = para_feld_vorname_string;
rec.feld_telefon_string = para_feld_telefon_string;
rec.feld_nachname_breite = 20;
rec.feld_vorname_breite = 20;
rec.feld_telefon_breite = 20;
} //set_var
void rec_oop_file_class::show_vars()
{
cout << "Hier ist show_vars() rec.feld_nachname_string=" << rec.feld_nachname_string<< endl; //debug
cout << "Hier ist show_vars() rec.feld_vorname_string=" << rec.feld_vorname_string << endl; //debug
cout << "Hier ist show_vars() rec.feld_vorname_breite=" << rec.feld_vorname_breite << endl; //debug
cout << "Hier ist show_vars() rec.feld_telefon_string=" << rec.feld_telefon_string << endl; //debug
cout << "Hier ist show_vars() rec.feld_telefon_breite=" << rec.feld_telefon_breite << endl; //debug
} //show_vars()
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////// main ////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// schon rec_oop_file_class >27.3.19
int main()
{
rec_oop_file_class f;
f.open_file("datei.txt");
f.set_vars("Zahlhaas", "Manfred", "6972489");
f.writerec();
f.set_vars("Kobold", "Raimund", "681430");
f.writerec();
f.set_vars("Müller", "Peter", "333333");
f.writerec();
f.set_vars("Ertl", "Thomas", "3148851");
f.writerec_nr(1);
}
#include <string>
#include <fstream>
#include <iomanip>
#include "stdio.h"
#include "string.h"
using namespace std;
//#include "/media/daten/prog/c/lib/pascal.hpp"
//#include "/media/daten/prog/c/lib/convert.hpp"
/////////////// Globale Variablen ///////////////
char debug;
struct rectype
{
string feld_nachname_string;
int feld_nachname_breite;
string feld_vorname_string;
int feld_vorname_breite;
string feld_telefon_string;
int feld_telefon_breite;
}; //rec;
/////////////// Ende Globale Variablen ///////////////
class rec_oop_file_class
{
private:
protected:
int i;
public:
fstream datei;
//protected: geht nicht
struct rectype rec;
struct rectype *recpointer;
void init_rec();
rec_oop_file_class();
~rec_oop_file_class();
void open_file(string para_dateiname_string);
void writerec();
void writerec_nr(int position);
int recsize;
void set_vars(string para_feld_nachname_string, string para_feld_vorname_string, string para_feld_telefon_string);
void show_vars();
string dateiname_string;
}; //rec_oop_file_class
void rec_oop_file_class::init_rec()
{
debug = 0;
if (debug == 1)
{
cout << "hier ist destruktor";
}
dateiname_string="dummy_file.txt";
set_vars("dummy nachname", "dummy vorname", "dummy 123");
rec.feld_nachname_breite = 20;
rec.feld_vorname_breite = 20;
rec.feld_telefon_breite = 20;
rec_size = feld_nachname_breite + feld_vorname_breite + feld_telefon_string;
} //init_rec
recsize=20+20
//----- KONSTRUKTOR ---------------------------------------
rec_oop_file_class::rec_oop_file_class()
{ //OPEN
init_rec();
debug = 0;
if (debug == 1)
{
cout << "Hier ist Konstruktor rec_oop_file_class" << endl; //debug
}
} //rec_oop_file_class::rec_oop_file_class
//----- KONSTRUKTOR ENDE ---------------------------------------
//----- DESTRUKTOR ---------------------------------------
rec_oop_file_class::~rec_oop_file_class()
{
debug = 0;
if (debug == 1)
{
cout << "hier ist destruktor";
}
datei.close();
} //rec_oop_file_class
//----- DESTRUKTOR ENDE ----------------------------------
void rec_oop_file_class::open_file(string para_dateiname_string)
{
dateiname_string = para_dateiname_string;
datei.open(dateiname_string, ios::out);
init_rec();
} //rec_oop_file_class::open_file()
//w1
void rec_oop_file_class::writerec()
{debug = 0;
if (debug == 1)
{
cout << "hier ist writerec()";
}
if (datei)
{
datei << left << setw(rec.feld_nachname_breite) << rec.feld_nachname_string;
datei << left << setw(rec.feld_vorname_breite) << rec.feld_vorname_string;
datei << left << setw(rec.feld_telefon_breite) << rec.feld_telefon_string;
}
else
cout << "writerec datei nicht offen" << endl;
} //rec_oop_file_class::writerec
void rec_oop_file_class::writerec_nr(int position)
{
debug = 1;
if (debug == 1)
{
cout << "Hier ist writerec_nr()" << endl; //debug
cout << "Hier ist writerec_nr() recsize=" << recsize << endl; //debug
cout << "Hier ist writerec_nr() position*recsize=" << position*recsize << endl; //debug
} //debug
datei.seekp(position*recsize);
writerec();
} //rec_oop_file_class_nr
void rec_oop_file_class::set_vars(string para_feld_nachname_string, string para_feld_vorname_string, string para_feld_telefon_string)
{
debug = 0;
if (debug == 1)
{
cout << "Hier ist set_vars" << endl; //debug
} //debug
rec.feld_nachname_string = para_feld_nachname_string;
rec.feld_vorname_string = para_feld_vorname_string;
rec.feld_telefon_string = para_feld_telefon_string;
rec.feld_nachname_breite = 20;
rec.feld_vorname_breite = 20;
rec.feld_telefon_breite = 20;
} //set_var
void rec_oop_file_class::show_vars()
{
cout << "Hier ist show_vars() rec.feld_nachname_string=" << rec.feld_nachname_string<< endl; //debug
cout << "Hier ist show_vars() rec.feld_vorname_string=" << rec.feld_vorname_string << endl; //debug
cout << "Hier ist show_vars() rec.feld_vorname_breite=" << rec.feld_vorname_breite << endl; //debug
cout << "Hier ist show_vars() rec.feld_telefon_string=" << rec.feld_telefon_string << endl; //debug
cout << "Hier ist show_vars() rec.feld_telefon_breite=" << rec.feld_telefon_breite << endl; //debug
} //show_vars()
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////// main ////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// schon rec_oop_file_class >27.3.19
int main()
{
rec_oop_file_class f;
f.open_file("datei.txt");
f.set_vars("Zahlhaas", "Manfred", "6972489");
f.writerec();
f.set_vars("Kobold", "Raimund", "681430");
f.writerec();
f.set_vars("Müller", "Peter", "333333");
f.writerec();
f.set_vars("Ertl", "Thomas", "3148851");
f.writerec_nr(1);
}
Es gibt viele Foren
Re: c++ schreibt nicht in datei
FTFY. Wobei ich mittlerweile eher glaube, du machst’s mit Absicht. Wobei sich mir allerdings der Zweck nicht erschließt – warum macht man sowas?mampfi hat geschrieben:22.05.2019 10:40:55Code: Alles auswählen
#include <iostream> #include <string> #include <fstream> #include <iomanip> #include "stdio.h" #include "string.h" using namespace std; //#include "/media/daten/prog/c/lib/pascal.hpp" //#include "/media/daten/prog/c/lib/convert.hpp" /////////////// Globale Variablen /////////////// char debug; struct rectype { string feld_nachname_string; int feld_nachname_breite; string feld_vorname_string; int feld_vorname_breite; string feld_telefon_string; int feld_telefon_breite; }; //rec; /////////////// Ende Globale Variablen /////////////// class rec_oop_file_class { private: protected: int i; public: fstream datei; //protected: geht nicht struct rectype rec; struct rectype *recpointer; void init_rec(); rec_oop_file_class(); ~rec_oop_file_class(); void open_file(string para_dateiname_string); void writerec(); void writerec_nr(int position); int recsize; void set_vars(string para_feld_nachname_string, string para_feld_vorname_string, string para_feld_telefon_string); void show_vars(); string dateiname_string; }; //rec_oop_file_class void rec_oop_file_class::init_rec() { debug = 0; if (debug == 1) { cout << "hier ist destruktor"; } dateiname_string="dummy_file.txt"; set_vars("dummy nachname", "dummy vorname", "dummy 123"); rec.feld_nachname_breite = 20; rec.feld_vorname_breite = 20; rec.feld_telefon_breite = 20; rec_size = feld_nachname_breite + feld_vorname_breite + feld_telefon_string;allerdings } //init_rec recsize=20+20 //----- KONSTRUKTOR --------------------------------------- rec_oop_file_class::rec_oop_file_class() { //OPEN init_rec(); debug = 0; if (debug == 1) { cout << "Hier ist Konstruktor rec_oop_file_class" << endl; //debug } } //rec_oop_file_class::rec_oop_file_class //----- KONSTRUKTOR ENDE --------------------------------------- //----- DESTRUKTOR --------------------------------------- rec_oop_file_class::~rec_oop_file_class() { debug = 0; if (debug == 1) { cout << "hier ist destruktor"; } datei.close(); } //rec_oop_file_class //----- DESTRUKTOR ENDE ---------------------------------- void rec_oop_file_class::open_file(string para_dateiname_string) { dateiname_string = para_dateiname_string; datei.open(dateiname_string, ios::out); init_rec(); } //rec_oop_file_class::open_file() //w1 void rec_oop_file_class::writerec() {debug = 0; if (debug == 1) { cout << "hier ist writerec()"; } if (datei) { datei << left << setw(rec.feld_nachname_breite) << rec.feld_nachname_string; datei << left << setw(rec.feld_vorname_breite) << rec.feld_vorname_string; datei << left << setw(rec.feld_telefon_breite) << rec.feld_telefon_string; } else cout << "writerec datei nicht offen" << endl; } //rec_oop_file_class::writerec void rec_oop_file_class::writerec_nr(int position) { debug = 1; if (debug == 1) { cout << "Hier ist writerec_nr()" << endl; //debug cout << "Hier ist writerec_nr() recsize=" << recsize << endl; //debug cout << "Hier ist writerec_nr() position*recsize=" << position*recsize << endl; //debug } //debug datei.seekp(position*recsize); writerec(); } //rec_oop_file_class_nr void rec_oop_file_class::set_vars(string para_feld_nachname_string, string para_feld_vorname_string, string para_feld_telefon_string) { debug = 0; if (debug == 1) { cout << "Hier ist set_vars" << endl; //debug } //debug rec.feld_nachname_string = para_feld_nachname_string; rec.feld_vorname_string = para_feld_vorname_string; rec.feld_telefon_string = para_feld_telefon_string; rec.feld_nachname_breite = 20; rec.feld_vorname_breite = 20; rec.feld_telefon_breite = 20; } //set_var void rec_oop_file_class::show_vars() { cout << "Hier ist show_vars() rec.feld_nachname_string=" << rec.feld_nachname_string<< endl; //debug cout << "Hier ist show_vars() rec.feld_vorname_string=" << rec.feld_vorname_string << endl; //debug cout << "Hier ist show_vars() rec.feld_vorname_breite=" << rec.feld_vorname_breite << endl; //debug cout << "Hier ist show_vars() rec.feld_telefon_string=" << rec.feld_telefon_string << endl; //debug cout << "Hier ist show_vars() rec.feld_telefon_breite=" << rec.feld_telefon_breite << endl; //debug } //show_vars() //////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// main //////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// // schon rec_oop_file_class >27.3.19 int main() { rec_oop_file_class f; f.open_file("datei.txt"); f.set_vars("Zahlhaas", "Manfred", "6972489"); f.writerec(); f.set_vars("Kobold", "Raimund", "681430"); f.writerec(); f.set_vars("Müller", "Peter", "333333"); f.writerec(); f.set_vars("Ertl", "Thomas", "3148851"); f.writerec_nr(1); }