[C++] Text in *.dat - Datei schreiben & abspeichern

Guten Abend,

also ich möcht ein kleines C++ Programm schreiben, was in eine *.dat - Datei (Dateityp kann man unter Windows mitm stinknormalen Texteditor öffnen) ein paar Textzeilen schreibt & die *.dat dann abspeichert. Beispielsweise gebe ich im C++ Programm ne ganze Reihe von Serials vor (mit ner Zahl davor in Klammern), wo man dann mit der Zahl auswählen kann welcher Serial eingetragen werden soll. Ich hatte vor dies mit einer switch-case anweisung zu realisieren. Wie würdet ihr vorgehen? Habt ihr noch weitere Ideen dies zu realisieren ?

Gruß

Riskman
 
Probiers mal mit fprint....

Übrigens - ich denke schon dass wir Dein Problem verstehen - aber....
 
deine frage ist einfach zu umfangreich um die mal eben schnell zu beantworten. dateibearbeitung kann mehrere kapitel in einem buch umfassen.

google einfach mal ein bissel nach c++ und dateibearbeitung oder schau dir die tut's auf link an

PS: nimm nicht fprint() ;)

mfg,
pacman
 
Danke für eure Antworten ! Nun ja, ich hab hier zwar ein fettes Buch rumliegen aber dies ist nicht gerade sehr lesefreundlich und etwas umständlich zu verstehen. Das Kapitel Dateibearbeitung wird schlecht beschrieben. fprint() werde ich nicht benutzen !
 
jo, auf den link von SuperSkater bin ich auch gestoßen, aber der is nicht wirklich toll bzw. ausführlich. für dein problem sollte es zwar gehn, is aber recht umständlich. aus langeweile werde ich morgen mal en bissel coden, da finde ich bestimmt auch 10 min für dein prog. heute is das allerdings nicht mehr drin ;). ui, is ja schon nach 12. naja, dann halt doch heute :P

mfg,
pacman
 
so, hier der code:

Code:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

#define MAX_SERIALS 3

void inDateiSpeichern (string&);

int main()

{
	string serial[MAX_SERIALS];
	int auswahl;

	string test ("hallo");

	serial[0] = "BAL34gfd5W3";
	serial[1] = "GFDGHS654GFD";
	serial[2] = "456ZHTFD76";

	cout << "Serial auswählen:" << endl;
	cout << "-----------------" << endl << endl;

	for (int i=0 ; i < MAX_SERIALS ; i++)

	{
		cout << i+1 << ") " << serial[i] << endl;
	}

	cout << endl << "Auswahl: "; 
	cin >> auswahl;

	inDateiSpeichern (serial[auswahl-1]);

	return 0;

}

void inDateiSpeichern (string &ausgewahlterString)

{
	ofstream out ("C://serials.dat", ios::out);

	if (out.good())

	{
		out << ausgewahlterString;
	}

	else

	{
		cout << "Datei konnte nicht geoeffnet werden" << endl;
	}
}

ich hab's mal nicht kommentiert, die funktionsweise müsste eingentlich erkennbar sein. dein switch kannst du dir sparn, wenn du's mit nem array machst. bei fragen, einfach fragen :P

mfg,
pacman
 
Erstmal großen Dank für eure zahlreichen Antworten. Also von http://www.volkard.de/vcppkold/dateien.html halt ich schon mal "fast" garnichts, weil die Quelltext-Beispiele sehr oft grobe Mängel aufweisen (Ja, besonders wenn's um die Arbeit mit Dateien geht). Spezieller Dank geht an pacman für seine Bemühungen ;).

Frage@pacman
also in Zeile 44, kann ich als Speicherort auch zum Beispiel "codkey.dat" angeben? Also ohne langen Pfad, wenn das Programm im selben Ordner ausgeführt wird (vielleicht wollens außer mir noch andere Leute benutzen). Geht das?
 
maeh, entweder ist dein Beispielcode fehlerhaft oder einige Bibliotheken sind bei meinem Digital Mars c/c++ Compiler net vorhanden ;(, bekomm ne Fehlermeldung beim Compilieren...
 
Also ich schreib hier nochmal ein einfaches Beispiel im C-Stil:
So wird eine datei geschrieben:

Code:
string = "Hello World";

int handle; // Das Datei-handle

handle = open("die-datei.txt", O_WRONLY);  // O_RDONLY (read-only) ORDWR(read-write) oder O_WRONLY 4 writeonly!

write(handle, /*anzahl*/ strlen(string), string);
/* oder read(handle, ...) */

close(handle); // Wieder schliessen!!!
 
@Riskman:

Spezieller Dank geht an pacman für seine Bemühungen
thx, np.

kann ich als Speicherort auch zum Beispiel "codkey.dat" angeben
jo, das kannst du. es sind auch relative pfadangaben erlaubt

entweder ist dein Beispielcode fehlerhaft oder einige Bibliotheken sind bei meinem Digital Mars c/c++ Compiler net vorhanden
hmm, also mein code hab ich mit dem VS 6.0 erstellt, aber soweit ich weiß, sind das alles standard libs, die eigentlich überall vorhanden sein müssten.

bekomm ne Fehlermeldung beim Compilieren...
poste doch mal die fehlermeldung, dann lässt sich der fehler bestimmt finden.

und von dem "c-stil" *hust-hust* würde ich abraten. da geht einfach net so viel wie bei ordentlichen streams und klassen. hmm, ich hoff mal, dass ich jetzt nix übersehn hab. naja, bin schon mal auf diese fehlermeldung gespannt.

mfg,
pacman
 
Hab mein Problem schon selber behoben !
Es lag an Zeile 5:

using namespace std;

Diese Eingabe scheint bei meinem Compiler irgendwie überflüssig zu sein, denn wenn ich den Code reinschreib gibts gleich nen Compilerfehler. Ohne geht's einwandfrei.
 
komisch. ohne einen namespace anzugeben die std-lib's benutzen. das hab ich noch nie gehört bzw. kling für mich etwas merkwürdig. ich hoffe mal für dich, das du damit nicht noch probleme bekommst. aber naja, wenn's geht soll's mir recht sein :P

mfg,
pacman
 
vielleicht lern ich auch mal die c++ syntax!
kann man mit steams auch connecten(mit soccet usw)? Oder muss man da doch wieder mit write arbeiten?

Also ich mag den C-Stil! ;)
 
Ui, da fällt mir gerade etwas auf. Darf man überhaupt in .dat - Dateien reinschreiben? Denn wenn ich mit folgendem Code in die *.dat reinschreibe, dann ergibt sich ein Problem. Er Schreibt einfach ne neue *.dat Datei anstatt die Zeilen in der vorhandenen *.dat reinzuschreiben.

Code:
#include <conio.h>
#include <string.h>
#include <fstream.h>

void main()
{
   ofstream out("codkey.dat");
   out<<"Es kommt ein Mann zum Baecker und sagt: Ich moechte 99 Broetchen."<<endl;
   out<<"Da fragt der Baecker: Duerfen es auch 100 sein?"<<endl;
   out<<"Der Mann antwortet: Nein, wer koennte denn so viele essen?"<<endl;

getch ();

}
 
Zurück
Oben