CString.Right() macht nicht was ich möchte - sicher eine kleinigkeit
-
Hallo Forum,
ich lerne in der Schule MFC und will jetzt den Namen des Tools mit einer Funktion auslesen. Doch irgendwie passiert einfach nichts. Es ist sicher nur eine Kleinigkeit die ich nicht sehe
CString GetToolName() { CString Path; ::GetModuleFileName(NULL, CStrBuf(Path,_MAX_PATH), _MAX_PATH); return Path.Right(Path.ReverseFind('\\')); }
Er schneidet einfach irgendwo ab.
Vielen Dank an euch
-
Hallo,
AfxGetAppName ist hier hilfreich..., siehe:
http://msdn.microsoft.com/en-us/library/sw69x1ek(v=vs.100).aspx
MfG,
Probe-Nutzer
-
Danke für deine Antwort, werde mir gleich die Lösung mit AFXGetName anschauen, da ich mit meiner Lösung nicht so zufrieden bin. Sie läuft zwar einwandfrei aber sauber ist das Bestimmt nicht.
Ist es richtig das ReverseFind von links zählt bis der erste Buchstabe kommt und Right mir dann den String von vorn kürzt?
CString GetApplicationDirectory() { CString strPath; ::GetModuleFileName(NULL, CStrBuf(strPath,_MAX_PATH), _MAX_PATH); // Stelle wo der Pfad abgeschnitten werden soll int number = ((strPath.GetLength()) - (strPath.ReverseFind(_T('\\'))+1 )); strPath = strPath.Right(number); strPath = strPath.GetBufferSetLength(strPath.ReverseFind(_T('.'))); return strPath; }
Der Logig nach könnte ich beim zweiten Durchgang dann mit Find('.') die Zeichen zählen und dann mit Left(Find('.')); den Namen anzeigen? Wäre das Sauberer als mit GetBufferSetLength?
-
Wenn du schon MFC lernen willst, dann nutze doch auch die MSDN-Doku für ReverseFind, siehe:
http://msdn.microsoft.com/de-de/library/d269k6dz(v=vs.100).aspx
und zu Right ebenso.
MfG,
Probe-Nutzer
-
einem Programmieren sagen er soll die msdn libary benutzen? meinst nicht ich habe das schon getan? wenn ich es da verstandne hätte, dann hätte ich nicht gefragt....
meine endgültige lösung
CString GetApplicationName() { CString strPath; ::GetModuleFileName(NULL, CStrBuf(strPath,_MAX_PATH), _MAX_PATH); // Stelle wo der Pfad abgeschnitten werden soll strPath = strPath.Right((strPath.GetLength()) - (strPath.ReverseFind(_T('\\'))+1 )); //strPath = strPath.GetBufferSetLength(strPath.ReverseFind(_T('.'))); strPath = strPath.Left(strPath.Find(_T('.'))); return strPath; }
-
PathRemoveFileSpec
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773748(v=vs.85).aspx
PathFindFIleName
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773589(v=vs.85).aspx
PathFindExtension
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773587(v=vs.85).aspxBTW: Eine EXE muss keine Extension haben. Man kann alles mit CreateProcess ausführen! Was passiert wenn Dein Find ein -1 liefert?