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 😃


Anmelden zum Antworten