ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
1892
1892
EMPFEHLEN
-
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:
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 :1 2
char dateiname[256]; sprintf(dateiname,"%i",dateinummer);
Code :1
sprintf(dateiname,"text_%i.txt",dateinummer);
mfg
SGSSGene
Edit: siehe unten deepthorat C++ LösungGeändert von SGSSGene (01.11.08 um 11:43 Uhr)
-
01.11.08 11:39 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
In C++ (im Gegensatz zu C) würde das so aussehen:
GrußCode cpp:1 2 3 4 5 6
#include <sstream> ostringstream filename; filename << dateinummer << ".txt"; ofstream out(filename.str().c_str());
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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
-
01.11.08 23:09 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Du müßtest die Ordner dann auch mit zum Stream geben. Z.B.
In jedem guten C++ Buch oder in jeder guten Onlinereferenz: http://www.cplusplus.com/reference/iostream/Code cpp:1
filename << "d:\\" << "Ordner" << ordnerNr1 << '\\' << "Ordner" << ordnerNr2;
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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?
-
02.11.08 14:09 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
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:
GrußCode cpp:1 2 3 4 5 6 7
istringstream filename("12.txt"); int nr; if (filename >> nr) { cout << "Dateinummer: " << nr << endl; } else { cerr << "keine Dateinummer vorhanden." << endl; }
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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
-
02.11.08 18:50 #9
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Das kann nicht sein. In dieser Zeile hast du ja überhaupt keinen >> Operator verwendet. Wie soll dann diese Fehlermeldung zustande kommen?!

Dann merk dir doch einfach die Dateinummer zwischen den Aufrufen. Oder meinst du zwischen verschiedenen Aufrufen des Programmes?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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ß
-
02.11.08 19:25 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
So kann es nicht funktionieren. Es ist auch völlig egal ob die Datei dort existiert oder nicht. Diese Methode funktioniert nur mit Dateinamen, die mit einer Zahl anfangen. Wenn der Dateiname bzw. in dem Fall der Pfad den du eingegeben hast nicht mit einer Ziffer beginnt funktioniert es nicht.
Zitat von c-mute
Ich glaube langsam du hast die Dateien noch gar nicht aus dem Ordner gelesen. Du mußt doch erstmal feststellen welche Dateien es überhaupt in den entsprechenden Ordnern gibt bevor du die Namen der Dateien auseinander nehmen kannst.... Das müßtest du unter Windows mit FindFirstFile und FindNextFile machen.
Gruß
PS: Bitte verwende die Code-Tags wenn du Quelltext in deinem Beitrag angibst.If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
FindFirstFile und FindNextFile sind glaube ich aus API, oder?
Macht aber nichts, denn ich habe die Lösung gefunden. Hier nochmal für alle die es interessiert:
Code :1 2 3 4 5 6 7 8 9 10 11 12
string einlesen; int dateinummer; dateinummer=11; std::stringstream filename; filename <<"d:\\Ordner-1\\Ordener-2\\Ordner-3\\" << dateinummer << ".txt"; ifstream meinedatei; meinedatei.open(filename.str().c_str(), ios::in); while(meinedatei >> einlesen) { cout<<"eingelesene Datei Nr. "<< dateinummer <<" mit dem Inhalt: " << einlesen << endl;
Funktioniert prima. Vielen Dank deepthroat !
Gruß
-
06.11.08 10:16 #13
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ja, aus der WinAPI. Dateisystemfunktionen sind betriebssystemspezifisch und gehören deshalb nicht zu C++.
Das ist doch aber nun was ganz anderes als du gefragt hattest. Oder ich hab dich irgendwie nicht richtig verstanden. Aber wolltest du nicht eigentlich die Dateinummer aus dem Dateinamen ermitteln?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Du weißt aber scon das Objekte Konstruktoren haben?! (c-mule)
Ehm und Dateisystemoperationen sind mein ich doch in TR2 enthalten, oder? Andernfalls einfach hier auf boost.org zurück greifen ...
Ähnliche Themen
-
In einen variablen String einen anderen an bestimmter Stelle einfügen
Von firewing im Forum PHPAntworten: 2Letzter Beitrag: 30.09.09, 23:10 -
für einen Textknoten einen Wert hinterlegen
Von P_H_I_L im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 22.02.08, 17:11 -
Der sich ergebende Dateiname ist zu lang.Geben Sie einen anderen Dateinamen an
Von lernen.2007 im Forum Microsoft WindowsAntworten: 4Letzter Beitrag: 30.11.07, 09:18 -
firstChild Wert einfügen
Von czessi im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 28.11.07, 00:56 -
Wert in Formular einfügen
Von supersalzi im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 21.08.05, 20:18





Zitieren

Login






