Datei aus Pfadname herausschneiden



  • Hi,

    ich moechte aus dem gesamten Pfad nur den dateiname haben. Ich hab mir gedacht man faegt mit einer Schleife hinten an und geht immer ein char weiter bis man auf und kopiert das char in den neuen string bis man auf "\" trifft aber irgendiwe klappt das nicht so das ist irgendwie ein Chaos mit char und string drin 😞

    std::string name = __FILE__;
    	std::string endname = "";
    	char zeichen = '\\';
    
    	for(int i=name.length();i>0;--i)
    	{
    		if(name[i] == zeichen)break;
    		else endname += name[i];
    
    	}
    


  • Hallo,

    dank der Memberfunktionen der STL-string-Klasse kann man das auch viel einfacher lösen:

    char zeichen = '\\';
        std::string name = __FILE__;
        std::string endname(name, name.find_last_of(zeichen) + 1, string::npos);
    

    und schon ist in endname der Dateiname ohne Pfad..

    MfG



  • Hi,

    vielen Dank haette nicht gedacht das es so einfach geht, ist ja super 🙂 🙂 🙂 🙂 🙂 Was macht das string::npos genau ??



  • der Konstruktor, der für das endname-Objekt eingesetzt wird, erwartet eine Anfangsposition (name.find_last_of(zeichen) + 1) und eine Endposition (beide vom Typ size_type), um die Zeichen, die aus name in endname landen sollen, zu bestimmen. string::npos ist ein spezieller Wert, den ich in diesem Falle verwendet habe, um damit ein "bis zum Ende" zu kennzeichnen. Normalerweise ist std:npos ein Wert, der einfach eine "Höchstgrenze" für den size_type darstellt. Da für std:npos garantiert ist, daß er über der "Höchstlänge" eines strings liegt, kann man diesen auch als "Endeposition" wie in solchen Fällen wie bei deinem Problem angeben. Außerdem wird dieser Wert von string-(Such-)Funktionen zurückgegeben, wenn z.B. ein Zeichen, nach dem gesucht wird, nicht gefunden wird. Er erfüllt also mehrere Zwecke, aber hier war er nur ein Hilfsmittel, um eben die "Endposition" für den Konstruktor festzulegen

    MfG


Anmelden zum Antworten