[c++] wie mit ofstream out einen int wert als dateinamen einfügen?

c-mule

Grünschnabel
Hi,

wie kann ich den Wert einer int Variablen als Dateinamen verwenden?

Beispiel:

int dateinummer;
string eingabe;
dateinummer=10;
getline (cin, eingabe);

ofstream out (?); //hier sollte die Variable dateinummer stehen, die Dateinamen sollen dann z.B. 10.txt, 11.txt, 12.txt heißen, der Inhalt der Datei soll Text sein.

out<<eingabe<<endl;

Vielen Dank für eure Hilfe
 
Mit sprintf kannst du so was machen:
Code:
char dateiname[256];
sprintf(dateiname,"%i",dateinummer);
in [dateiname] steht nun der Wert von [dateinummer] Als String, diese Variante erlaubt es dir auch sehr einfach noch was davor zu setzten oder ein anhängsel zu Dateinummer: z.B:
Code:
sprintf(dateiname,"text_%i.txt",dateinummer);

mfg
SGSSGene

Edit: siehe unten deepthorat C++ Lösung
 
Zuletzt bearbeitet:
Hi.

In C++ (im Gegensatz zu C) würde das so aussehen:
C++:
#include <sstream>

ostringstream filename;

filename << dateinummer << ".txt";
ofstream out(filename.str().c_str());
Gruß
 
Vielen Dank für eure Antworten,

die Lösung von dir, deepthroat, konnte ich gut in meine Quellcode integrieren, dabei tun sich aber neue Fragen auf:

1. Wie kriege ich es nun hin, daß ich die Dateien in verschiedenen Ordnern speichern kann, z.B. d:\\Ordner1\\Ordner2 ?

So , wie ich es bisher getan habe:

ofstream out("d:\\Ordner1\\Ordner2\\text.txt");

geht es leidern nicht mehr.

2. Wo kann ich mehr über #include <sstream> erfahren?

Viele Grüße
 
Hi.
1. Wie kriege ich es nun hin, daß ich die Dateien in verschiedenen Ordnern speichern kann, z.B. d:\\Ordner1\\Ordner2 ?

So , wie ich es bisher getan habe:

ofstream out("d:\\Ordner1\\Ordner2\\text.txt");

geht es leidern nicht mehr.
Du müßtest die Ordner dann auch mit zum Stream geben. Z.B.
C++:
filename << "d:\\" << "Ordner" << ordnerNr1 << '\\' << "Ordner" << ordnerNr2;
2. Wo kann ich mehr über #include <sstream> erfahren?
In jedem guten C++ Buch oder in jeder guten Onlinereferenz: http://www.cplusplus.com/reference/iostream/

Gruß
 
Super deepthroat

Das funktioniert prima. Mit dem Rückweg, also die Dateinamen aus den Ordnern auszulesen und in int Werte umzuwandeln scheint aber anders zu funktionieren?

Alle meine Versuche sind bisher gescheitert. Ich benötige die Zahlenwerte der Dateinamen, um sie anschließend weiter zu verarbeiten.

Wie krieg ich da hin?
 
Das funktioniert prima. Mit dem Rückweg, also die Dateinamen aus den Ordnern auszulesen und in int Werte umzuwandeln scheint aber anders zu funktionieren?

Alle meine Versuche sind bisher gescheitert. Ich benötige die Zahlenwerte der Dateinamen, um sie anschließend weiter zu verarbeiten.

Wie krieg ich da hin?
Da mußt du die Dateinamen dann parsen. (Ich nehme mal an ausgelesen hast du die Dateinamen schon).
Für die Dateinamen könntest du es so machen:
C++:
istringstream filename("12.txt");
int nr;
if (filename >> nr) {
  cout << "Dateinummer: " << nr << endl;
} else {
  cerr << "keine Dateinummer vorhanden." << endl;
}
Gruß
 
Hallo,

ich habe es so probiert:

istringstream filename("d:\\Ordner-1\\Ordnder-2\\Ordnder-3\\1.txt");

Dabei bekomme ich aber eine Fehlermeldung:

invalid operands of types `const char[36]' and `int' to binary `operator>>'

Das ist auch noch nicht ganz das, was ich wirklich benötige.

So soll es sein:
Das Programm soll z.B. Datei 1.txt lesen, danach soll die Dateinummer um 1 erhöht werden, um eine Datei 2.txt zu schreiben. Nun soll der Prozess von vorne laufen:
Datei 2.txt lesen, Dateinummer um eins erhöht, Datei 3.txt schreiben usw.

Danke und viele Grüße
 
Hallo,

ich habe es so probiert:

istringstream filename("d:\\Ordner-1\\Ordnder-2\\Ordnder-3\\1.txt");

Dabei bekomme ich aber eine Fehlermeldung:

invalid operands of types `const char[36]' and `int' to binary `operator>>'
Das kann nicht sein. In dieser Zeile hast du ja überhaupt keinen >> Operator verwendet. Wie soll dann diese Fehlermeldung zustande kommen?! :confused:
Das ist auch noch nicht ganz das, was ich wirklich benötige.

So soll es sein:
Das Programm soll z.B. Datei 1.txt lesen, danach soll die Dateinummer um 1 erhöht werden, um eine Datei 2.txt zu schreiben. Nun soll der Prozess von vorne laufen:
Datei 2.txt lesen, Dateinummer um eins erhöht, Datei 3.txt schreiben usw.
Dann merk dir doch einfach die Dateinummer zwischen den Aufrufen. Oder meinst du zwischen verschiedenen Aufrufen des Programmes?

Gruß
 
Ups, sorry, diese Fehlermeldung kam bei dem Versuch:

istringstream filename("d:\\Ordner-1\\Ordnder-2\\Ordnder-3\\>>nr>>.txt");

so:

int nr;
istringstream filename("d:\\Ordner-1\\Ordner-2\\Ordner-3\\11.txt");
if (filename >> nr) {
cout << "Dateinummer: " << nr << endl;
}
else {
cerr << "keine Dateinummer vorhanden." << endl;
}

hat es aber auch nicht funktioniert, obwohl sich die Datei 11.txt im angegebenen Ordner befindet.

einfacher wäre vielleicht auch, vor dem nächsten speichern festzustellen, welche die letzte gespeicherte Dateinummer ist.

Wie kann ich aber in deinem letzten Vorschlag die Dateinummer, z.B. 12.txt flexibel handhaben, so daß ich bei Bedarf eine andere Nummer einfügen kann?

Gruß
 
Zurück