int t char und char miteinander verknüpfen



  • Hi,

    ich möchte gerne eine Datei umbenennen. Allerdings habe ich Problem mit dem erstellen des neuen Dateinamen.

    Alter Name: alarm.mp3 soll zu alarm_6.mp3 werden.

    Dabei steht die 6 in der Variablen "counter".
    Wie ich nun den neuen Namen generieren soll weiß ich nicht so ganz.
    s.u.

    if(PathFileExists(TEXT("C:\\log\\alarm.mp3")))
    {
        cout <<"Datei existiert\n";
    	char prefix = (char)counter-1;
    	cout << prefix;
    	char newname[] = "C:\\log\\alarm_....????";
    
    	cout <<"DAtei wird umbenannt"<<endl;
    errno_t err = rename(filename, newname);
    
    }
    else
    {
    	cout <<"Datei existiert nicht" << endl;
    }
    


  • Benutze std::string!!

    Dazu #include <string>
    Dann kannst Du mit + die Strings zusammensetzen.

    Um rename(..) aufrufen zu können, musst du dann auf dem std::string Objekt .c_str() aufrufen, um einen null-terminierten const char* zu erhalten.

    Simon

    Edit:
    bzw. std::stringstream um den int in einen std::string umzuwandeln.
    FAQ: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html



  • Um aber Zahlen und Strings zu verketten, nimm einen stringstream (so wie du auch cout bisher benutzt):

    #include <sstream>
    
    ostrstream os;
    
    int zahl = prefix;
    
    os << "C:\\log\\alarm_" << zahl << ".mp3";
    
    const string &str = os.str(); // string extrahieren
    
    const char *cstr = str.c_str(); // c-string extrahieren (für deine rename-Funktion)
    


  • Danke für den Tipp.
    Wollte ich die Sache mit Strings machen hätte ich nicht fragen zu brauchen.
    Da im ganzen Projekt nur chars verwendet werden, sollte es einheitlich bleiben.

    Du hast übrigens ein "ends" vergessen. 🙂

    os << "C:\\log\\alarm_" << zahl << ".mp3" <<ends;
    


  • Und was ist ends bitte schön??

    std::cout benutzt Du, aber std::string nicht? Ja, gut..

    Und warum postest Du dann nicht im Ansi C Forum??

    Mit strcat (c-strings zusammenbauen) und itoa (int zu c-string) sollte dein Vorhaben möglich sein.

    Simon



  • das hier ist ends:
    http://www.cplusplus.com/reference/iostream/manipulators/ends/

    braucht man aber hier aber nicht(überhaupt braucht man es so gut, wie nie)...

    @Senseman:
    "Da im ganzen Projekt nur chars verwendet werden, sollte es einheitlich bleiben." weil? wenn bisher const char* bzw const char[] gereicht hat, ist das ja schön - aber wenn es irgendwann nicht mehr reicht, reicht es eben einfach nicht mehr...

    Eigtl ist auch schon alles gesagt...



  • @unskilled: Danke für den Link. Habe ich noch nie gebraucht (und wahrscheinlich wirdds auch nie nötig sein... wie Du geschrieben hast).


Anmelden zum Antworten