Pfade



  • Hallo,
    ich komme von C#. In C# ist es relativ leicht möglich, den Pfad des Desktops, oder andere Pfade zu finden.
    Wie mache ich das ganze in C++ ?
    Gibt es dafür eine Funktion, welche einen String zurückwirft [ evtl. mit der WinAPI (soll nur für Windows )]?
    Danke im Voraus



  • Du meinst Environment.GetFolderPath?
    Diese ruft intern auch nur die WinAPI-Funktion SHGetFolderPathA auf (bzw. die W-Variante).



  • @Th69 Danke erstmal. Könntest du mir evtl. ein Beispiel für den Desktop geben, da ich nicht weiß, was der Parameter csidl ist.
    Danke im Voraus



  • @Th69 sagte in Pfade:

    Diese ruft intern auch nur die WinAPI-Funktion SHGetFolderPathA auf (bzw. die W-Variante).

    wobei

    Note As of Windows Vista, this function is merely a wrapper for SHGetKnownFolderPath. The CSIDL value is translated to its associated KNOWNFOLDERID and then SHGetKnownFolderPath is called. New applications should use the known folder system rather than the older CSIDL system, which is supported only for backward compatibility.

    @redexception sagte in Pfade:

    da ich nicht weiß, was der Parameter csidl ist.

    Das steht in der Dokumentation. Bitte lesen.



  • @Swordfish CSIDL_COMMON_DESKTOPDIRECTORY ahhh hab es gefunden, danke.



  • @redexception Ähm. Das ist der Desktop für "All Users". Wahrscheinlich suchst Du eher CSIDL_DESKTOP (bzw. FOLDERID_Desktop).



  • @Swordfish ```cpp
    std::string getDesktopPath()
    {
    LPITEMIDLIST pidl;
    LPMALLOC pShellMalloc;
    char szDir[200];
    if (SUCCEEDED(SHGetMalloc(&pShellMalloc)))
    {
    if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl))) {

            SHGetPathFromIDListA(pidl, szDir);
            pShellMalloc->Free(pidl);
        }
        pShellMalloc->Release();
    }
    
    return std::string(szDir);
    

    }



  • Schreib' bitte in eine Zeile vor Deinen Code ``` und in eine Zeile nach Deinem Code ```. Alternativ markiere Deinen Code und klicke auf das </> in der Symbolleiste über dem Eingabefeld. Du kannst Deine Beiträge auch im Nachhinein noch bearbeiten. Den Menüpunkt "Bearbeiten" findest Du in dem Drei-Punkte-Menü rechts unter Deinen Beiträgen.


    Warum nicht SHGetKnownFolderPath()??

    #include <cstdlib>
    #include <iostream>
    #include <string>
    
    #include <windows.h>
    #include <shlobj.h>
    
    int main()
    {
        PWSTR path;
        if (SHGetKnownFolderPath(FOLDERID_Desktop, KF_FLAG_DEFAULT, nullptr, &path) != S_OK) {
            std::cerr << "SHGetKnownFolderPath() failed :(\n\n";
            return EXIT_FAILURE;
        }
    
        std::wstring desktop_path{ path };
        CoTaskMemFree(path);
    
        std::wcout << desktop_path << '\n';
    }
    


  • @redexception sagte in Pfade:

    SHGetSpecialFolderLocation

    Hast Du die Doku gelesen??

    [SHGetSpecialFolderLocation is not supported and may be altered or unavailable in the future. Instead, use SHGetFolderLocation.]

    Aber wie kommst Du überhaupt auf SHGetSpecialFolderLocation() wenn Th69 Dir SHGetFolderPath() nahelegt und ich Dir (ganz oben schon) SHGetKnownFolderPath()?



  • @Swordfish
    Oder CComHeapPtr<wchar_t> path;.



  • @Swordfish hab mich durch die Doku durchgeklickt und bin da gelandet und ja xd


Log in to reply