Name des Ausgangsfile = Name des EIngangsfiles mit anderer Endung



  • Mojens !!

    Beim Aufruf meines Programms lese ich eine (bzw. mehrere) Config Datei(en) ein.

    int main(int argc, char *argv[])
    {
    for (int i=1; i<argc-1;i++)
    {
    
    ifstream InStream(argv[i], ios::in);
    
    blabla
    
    }
    }
    

    Pro config Datei möchte ich nun eine Bilddatei erzeugen, welche den selben Namen wie die eingelesene Datei (z.B. config_1.txt) jedoch eine Andere Endung (z.B. config_1.tga) hat.

    was muß dann in der Zeile

    ofstream ofl(..., ios::binary);
    

    anstelle der Pünktchen stehen?

    Danke und viele Grüße

    Lutz



  • wahrscheinlich muss vorher ein string replace beim dateinamen erfolgen 🙄



  • bsp:

    void replaceext(std::string &s, const std::string &strExt)
    { s.replace(s.rfind(".") + 1, s.size(), strExt); }
    
    int main()
    {
    	std::string str("config_1.txt");
    
    	replaceext(str, "jpg");
    
    	std::cout << str << std::endl;
    
    	return 0;
    }
    


  • Danke !!!

    War gerade selber dabei es mit replace zu versuchen.
    Dabei bin ich auf ein weiteres Problem gestoßen:

    argv[] ist vom Typ *char.

    strings scheinen intern vom Typ unsigned int* zu sein. Jedenfalls bekomme ich eine Meldung invalid convertion from char* to unsigned int*...

    Na ich bastel mal noch n bisschen. Wer weiß was das wieder soll.

    Grüße,

    Lutz



  • Ach nee, dit war n Klammerfehler.
    Hab zwar immer noch Fehlermeldungen, aber wer weiß...



  • int main(int argc, char *argv[])
    {
        std::string str;
    
        for(int i=1; i<argc-1;i++)
        {
            str = argv[i];
    
            // mach was
    
            replaceext(str, "jpg");
    
            // mach wieder was
       }
    }
    


  • Ich habs jetzt so gemacht:
    Eigentlich nach Lehrbuch.

    string cOutName;
    
    cOutName = argv[i];
    cOutName.replace(cOutName.find( "dat"), strlen("dat"),"tga");
    
    cout << cOutName << endl;
    

    Er kompiliert und beim Starten gibts diese Meldung:

    terminate called after throwing an instance of 'std::out_of_range'
    what(): basic_string::replace
    Aborted



  • terminate called after throwing an instance of 'std::out_of_range'

    mit andren worten: du greifst auf ein feld ausserhalb des strings zu



  • So, hab die Zeile für den Austausch von xyz in tga von Miller_m übernommen und es funktioniert.

    Warum meine Version nicht lief weiß ich zwar immer noch nicht aber was solls.

    Auf jeden Fall euch ein Dickes Dankeschön!!

    -Lutz


Anmelden zum Antworten