Datei Namen durch Datum ersetzen
-
Schönen guten Tag,
mein Programm das den Namen einer Textdatei in ein Datum umbenennen soll.
Aber wie immer kommt datei nur unlustiger Quak raus.
Eine Datei die irgendwas mit NUM_.. heisst und keine Endung hat.
Vielen Dank für alle Hilfe im Vorraus!#include <fstream> #include <iostream> #include <time.h> #include <stdio.h> using namespace std; int main() { time_t Zeitstempel; string fromFilename; string toFilename; tm *nun; Zeitstempel = time(0); nun = localtime(&Zeitstempel); fromFilename = "test.txt"; toFilename = + nun->tm_mday + '.' + nun->tm_mon+1 + '.' + nun->tm_year+1900 + ".txt"; int result= rename(fromFilename.c_str(), toFilename.c_str()); if (result!=0) perror("Fehler:"); return 0; }
-
Und wo ist da das Problem? Wenn es dir darum geht, die Zahlenwerte in Stringform umzuwandeln, hilft ein Blick in die FAQ weiter (Thema "Einmal Zahl und zurück").
-
Mir fehlt es noch ziemlich an Grundwissen, und ich glaube das Problem liegt daran das ich beim toFilename öffter das + vernwendet habe, damit komm ich ja mit den Beispielen dann auch nicht weiter.
Ich weiss auch nicht wie ich einen Umwandlungsweg einer Variable oder mehrere Variablen zu einer zusammen fügen kann.
Dies müsst ich ja wenn ich das Datum mit Punkt dazwischen mit einem Namen austauschen möchte.
-
höhlengnarf schrieb:
Mir fehlt es noch ziemlich an Grundwissen, und ich glaube das Problem liegt daran das ich beim toFilename öffter das + vernwendet habe, damit komm ich ja mit den Beispielen dann auch nicht weiter.
Dann solltest du wohl erstmal mit einfacheren Aufgaben einsteigen.
Ich weiss auch nicht wie ich einen Umwandlungsweg einer Variable oder mehrere Variablen zu einer zusammen fügen kann.
Dies müsst ich ja wenn ich das Datum mit Punkt dazwischen mit einem Namen austauschen möchte.Du kannst alle nötigen Werte nacheinander in einen Stringstream schreiben und am Ende dessen Inhalt komplett nehmen und weiterverarbeiten:
ostringstream konverter; konverter<<"NUM_"<<nun->tm_mday<<"_"<<...; toFilename = konverter.str();
-
CStoll schrieb:
Dann solltest du wohl erstmal mit einfacheren Aufgaben einsteigen.
Aber wer seine Fähigkeiten an geringen Aufgaben misst der wird doch niemals über sich hinaus wachsen.

Schön das es so einfach ist, jetzt komm ich bestimmt weiter.
Danke!
-
Hi,
ich finde bei so wenig Code hättet ihr ihn ruhig ein komplettes Beispiel geben können:#define _CRT_SECURE_NO_DEPRECATE #include <fstream> #include <iostream> #include <sstream> #include <ctime> // ctime using namespace std; int main() { time_t Zeitstempel = time(0); tm *nun = localtime(&Zeitstempel); std::stringstream newFilename; newFilename << nun->tm_mday << "." << nun->tm_mon + 1 << "." << nun->tm_year+1900 << ".txt"; int result = rename("test.txt", newFilename.str().c_str()); if (result != 0) { perror("Fehler"); } return 0; }Hoffe das hilft dir weiter!
CStoll schrieb:
ostringstream konverter; konverter<<"NUM_"<<nun->tm_mday<<"_"<<...; toFilename = konverter.str();Und du hast ihn nebenbei auch noch falsch verstanden... Er meinte seine Datei wird zu irgendwas mit NUM_ umbenannt, aber das war ja etwas was er nicht wollte...
Viele Grüße,
Patrick
-
Hi, ich hab das jetzt an den code angepasst aber es benennt nur eine andere *.txt um, nicht die out.txt.
Gibt es sowas wie eine Zwischenpause, in der das out-File vertig gemacht wird und wenns vertig ist gehts weiter?#define _CRT_SECURE_NO_DEPRECATE #include <iostream> #include <string> #include <cstdlib> #include <ctime> #include <conio.h> #include <fstream> #include <sstream> class PasswortGenerator { public: PasswortGenerator() { std::srand(std::time(0)); } void generierePasswort(std::string &ergebnis, size_t anzahlZeichen) { int iZeichen; ergebnis.clear(); ergebnis.reserve(anzahlZeichen); for (size_t i = 0; i < anzahlZeichen; ++i) { iZeichen = std::rand() % ALPHABET.length(); ergebnis.append(1, ALPHABET[iZeichen]); } } private: static const std::string ALPHABET; }; const std::string PasswortGenerator::ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZß0123456789 .,:-~+/[]`´'°²³µ#€$@%§{}"; using namespace std; int main() { ofstream schreiben("out.txt"); PasswortGenerator pg; std::string passwort; pg.generierePasswort(passwort, 15); schreiben << passwort << std::endl; time_t Zeitstempel = time(0); tm *nun = localtime(&Zeitstempel); std::stringstream newFilename; newFilename << nun->tm_mday << "." << nun->tm_mon + 1 << "." << nun->tm_year+1900 << ".txt"; int result = rename("out.txt", newFilename.str().c_str()); if (result != 0) { perror("Fehler"); } return 0; }Grüße
-
1. Bitte benutze, für C/C++ Code die cpp-Tags!
Zu deinem Problem: Was möchtest du jetzt überhaupt machen? Ich schätze das Umbenennen schlägt fehlt. Leider kann man ohne Syntax-Highlighting alles nicht so gut erkennen, aber ich schätze du vergisst die Datei nach dem Schreibvorgang zu schließen. Aber mal im Ernst: Warum benennst du die Datei nicht sofort richtig?
#define _CRT_SECURE_NO_DEPRECATE #include <iostream> #include <string> #include <cstdlib> #include <ctime> #include <conio.h> #include <fstream> #include <sstream> class PasswortGenerator { public: PasswortGenerator() { std::srand(std::time(0)); } void generierePasswort(std::string &ergebnis, size_t anzahlZeichen) { int iZeichen; ergebnis.clear(); ergebnis.reserve(anzahlZeichen); for (size_t i = 0; i < anzahlZeichen; ++i) { iZeichen = std::rand() % ALPHABET.length(); ergebnis.append(1, ALPHABET[iZeichen]); } } private: static const std::string ALPHABET; }; const std::string PasswortGenerator::ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZß0123456789 .,:-~+/[]`´'°²³µ#€$@%§{}"; using namespace std; int main() { time_t Zeitstempel = time(0); tm *nun = localtime(&Zeitstempel); std::stringstream newFilename; newFilename << nun->tm_mday << "." << nun->tm_mon + 1 << "." << nun->tm_year+1900 << ".txt"; ofstream schreiben(newFilename.str().c_str()); PasswortGenerator pg; std::string passwort; pg.generierePasswort(passwort, 15); schreiben << passwort << std::endl; schreiben.close(); // Wenn du was aus einer Schublade holst/legst, machst du sie danach ja sicher auch wieder zu... return 0; }Du solltest vielleicht lieber eine Methode in deiner Klasse einbauen, die alles in die Datei schreibt. Dann brauchst du nur noch diese aufrufen

Viele Grüße,
Patrick
-
Ok, herzlichen Dank jetzt hab ichs.
Viele Grüße