Problem mit PathRemoveFileSpec
-
CString zielpfad ="c:\\test\\123\\text.pdf"; ::PathRemoveFileSpec(zielpfad);//nur noch der pfad!Führt zu der Meldung:
'PathRemoveFileSpecA': Konvertierung des Parameters 1 von 'CString' in 'LPSTR' nicht möglich.
Ich kann dem zielpfad zwar noch .GetBuffer() anhängen, aber ich habe dann
einen leeren CString zielpfad am ende
Ich dachte bisher man könne das ganz einfach so schreiben:
CString zielpfad ="c:\\test\\123\\text.pdf"; CString xy = ::PathRemoveFileSpec(zielpfad);
-
probiers mit .GetBuffer(256)
und nach dem PathRemoveFileSpec noch ein .ReleaseBuffer()
-
PathRemoveFileSpec ändert direkt den übergebenen Puffer.
Besser:
CString zielpfad ="c:\\test\\123\\text.pdf"; ::PathRemoveFileSpec(CStrBuf(zielpfad, zielpfad.GetLength()));
-
Falls Du noch mehr mit Pfaden rummurksen mußt: http://www.codeproject.com/KB/files/phShellPath.aspx
Für das getBuffer / ReleaseBuffer lohnt sich auch eine CStringLock-Klasse:
class CStringLock { public: CString * m_string; LPTSTR m_buffer; public: CStringLock(CString & s) : m_string(&s) { m_buffer = m_string->GetBuffer(0); } CStringLock(CString & s, int minChars) : m_string(&s) { m_buffer = m_string->GetBuffer(minChars); } operator LPTSTR() { return m_buffer; } void Release(int newLen = -1) { if (m_string) { m_string->ReleaseBuffer(newLen); m_string = NULL; m_buffer = NULL; } } ~CStringLock() { Release(); } };Dann kann man einfach:
CString zielpfad ="c:\\test\\123\\text.pdf"; ::PathRemoveFileSpec(CStringLock(zielpfad));
-
peterchen schrieb:
Für das getBuffer / ReleaseBuffer lohnt sich auch eine CStringLock-Klasse:
Warum denn nicht gleich die aus der MFC (CStrBuf) nehmen?
-
Stammt noch aus einem projekt mit VC6-Unterstützung
