Problem mit CString.Find() und/oder CString.Right()



  • Hallo 😉

    Ich habe eine Methode geschrieben, die mir die Dateiendung einer Datei aus dem Namen dieser Datei liefern soll, der als CString-Objekt vorliegt. Dazu habe ich die Methode CString.Right(int start) gewählt und mittels CString.Find(...) den gesuchten Index herausgefunden. Aber es kommt nicht heraus was rauskommen soll. Ich erhalte dummerweise die ersten drei Zeichen des Namens.
    Hab schon gedacht, das Find() wohl -1 zurückliefert und das es daran liegt, aber der Code sollte doch lafen oder?

    Danke im voraus

    CString CPlaylistMakerDlg::getExt(CString dateiname)
    {
      return (dateiname.Right(dateiname.Find('.', 0)));
    }
    

    greetz
    SLi



  • sliwalker schrieb:

    CString.Right(int start) gewählt und mittels CString.Find(...) den gesuchten Index herausgefunden. Aber es kommt nicht heraus was rauskommen soll.

    Das liegt daran, dass der Parameter von Right kein Index ist, sondern eine Anzahl - er heißt übrigens nCount, nicht start 😉

    Deine Methode funktioniert außerdem nicht, wenn schon vorher ein Punkt im Dateinamen vorkommt, was durchaus erlaubt ist. Es gibt auch schon eine fertige Funktion für diesen Zweck: PathFindExtension.



  • Oder man nutzt CString::FindReverse. 🙂
    Und CString::Mid ist für diesen Zweck auch einfacher. 🙂



  • Vielen Dank euch!

    Habs so umgesetzt:

    CString CPlaylistMakerDlg::getExt(CString dateiname)
    {
      return (dateiname.Mid(dateiname.ReverseFind('.')));
    }
    

    Die eingebaute Methode zum finden der Extension konnte ich nicht nehmen, wil ich nicht dran kam. Hatte nur den String.


Anmelden zum Antworten