Suchen im CString
-
Hiho,
ich suche in einem CString die Dateiendung, komme aber nicht richtig
damit zurecht.Mein Ansatz:
CString strFound ="112244_dddf.doc"; int posde = strFound.Find('.'); //suche nach dem Punkt CString dateiendung=strFound.Right(posde);//lese ab der gefundenen Position nach rechts ausAlles was er findet ist 44_dddf.doc ? Aber sollte er nicht nur ".doc"
ausgeben?
-
Lies die Hilfe nochmal genau.

Oder zähl mal:
112244_dddf.doc der . ist an Stelle 11.
Und du bekommst "44_dddf.doc", das sind 11 Zeichen.
Nämlich die letzten 11 Zeichen des Strings.Du musst noch die Stringlänge einberechnen.
-
ich glaub da gabs ne funktion mit namen
.GetFileExtend()(geht nur mit CFile glaub ich)
oder so. Damit sollte das eigentlich klappen.
oder du gehst so an die sache ran:
du weißt, dass der extend (die endung) immer 3 zeichen hat. also lässt du dir die Länge des Strings geben (mit GetLength), ziehst die 4 zeichen ab(.doc) und lässt dir dann einfach die restlichen zeichen mit
.Left(int Count)ausgeben. Verdammt umständlich aber sollte gehen.
P.S.
Hatte ne anstrengende nacht und bin etwas defuse
-
Achja, guck dir Mid an, das ist weniger Rechnerei.

-
Ja dank euch. Jetzt geht es, dank atoi(..) und .Mid

-
Hallo,
und wenn die Endung nicht 3 Zeichen lang ist, klappts dann auch?
Würde das auch gehen:
CString csDatei = L"datei.jpeg"; int iPos = csDatei.ReverseFind(L'.'); CString csEndung = csDatei.Right(iPos); // und wenn der Punkt nicht mit in der Endung stehen soll dann eifach 1 weniger extrahieren: csEndung = csDatei.Right(iPos - 1);grüsse
pixel
-
Afair hat man mit ReverseFind den selben Effekt wie mit Find.
Es wird nur bei mehreren Punkten im String der letzte und nicht der erste genommen.
-
Grundsätzlich sollte man zum Suchen der Dateiendung eine Standardfunktion nutzen:
WIN32: PathFindExtension
CRT: _splitpath
-
int iPosExt = csFileName.ReverseFind(_T('.')); CString csExtension = csFileName.Mid(iPosExt, (csFileName.GetLength()-iPosExt));so gehts immer egal wie lang die extension ist und egal in welchen format die datei eingelesen wurde
man kanns auch weiterfuehren das man Pfad / File / Extension getrennt hat:
int iPosPath = (csFileName.ReverseFind(_T('\\'))+1); CString csPath = csFileName.Mid(0, iPosPath); int iPosExt = csFileName.ReverseFind(_T('.')); CString csExt = csFileName.Mid(iPosExt, (csFileName.GetLength()-iPosExt)); CString csFile = csFileName.Mid(iPos, (iPosExt-iPosPath));die einzigste voraussetzung ist das ein CString kommt wo es path+file+extension gibt - also wie nach normalen auslesen - wenn es keine extension gibt wird leider csFile leer sein und der dateiname bei csExt sein, kann man aber abfangen wie man moechte