Pfad von neu erstellten Datei bestimmen



  • Hallo leute,

    Ich habe mal ne trivial frage... Wie kann ich den Pfad der erzeugten Datei explizit bestimmen ? Ich möchte nicht, dass es im selben Ordner erstellt wird sondern auf dem Desktop!

    hier ist die Methode zum erstellen der Datei...

    :

    std::ofstream write( "Test.text" );
    

    ................



  • // 1.
    std::ofstream write("C:\\User\\Desktop\\Test.text");
    

    mit SHGetFolderPath kannst du unter windows den pfad des desktops erfragen



  • Also ich habe es explizit reingeschrieben hat leider nicht funktioniert...

    Wie siehts mit SHGetFolderPath der Abfrage aus ? Wie kriege ich das hin ?



  • Wo wir schonmal bei Aktuellen Pfaden sind, wie kriege ich es hin das es mir bei QT nicht den Installierten Pfad öffnet sondern den vom Desktop wenn ich den Button klicke....

    das ist der source file:

    dir = QFileDialog::getOpenFileName(this,
                                    tr("Find Files"), QDir::currentPath());
    
       	 ui.lineEdit->setText(dir1);
    


  • desktoppfad schrieb:

    std::ofstream write("C:\\User\\Desktop\\Test.text");
    

    Hier vielleicht nicht sehr relevant, aber grundsätzlich solltest du den plattformunabhängigen Slash / dem Backslash vorziehen.



  • Also viel gebracht hat diese Explizite angabe leider auch nicht! Es speichert mir die Datei in so einen komischen binary ordner!!! 😞



  • Zum Auffinden diverser Systemverzeichnisse habe ich mal das hier gefunden.

    std::string GetSpecialFolder(int Folder)
    {
        LPITEMIDLIST  pidl;
        LPMALLOC      pShellMalloc;
        char          szDir[MAX_PATH];
        // SHGetSpecialFolderLocation generates a PIDL. The memory for the PIDL
        // is allocated by the shell, and should be freed using the shell
        // mallocator COM object. Use SHGetMalloc to retrieve the malloc object
        std::string result("");
        if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
        {
            // if we were able to get the shell malloc object, then
            // proceed by fetching the pidl
            HRESULT hdres = SHGetSpecialFolderLocation(NULL, Folder, &pidl);
            if(hdres == S_OK)
            {
                // return is true if success
                if(SHGetPathFromIDList(pidl, szDir))
                {
                    result = szDir;
                }
                pShellMalloc->Free(pidl);
            }
            pShellMalloc->Release();
        }
        return result;
    }
    

    Für Folder gibt man dann die symbolische Konstante das gewünschten Pfades an. Für den Desktop wäre das z.Bsp. CSIDL_COMMON_DESKTOPDIRECTORY (All Users) oder CSIDL_DESKTOPDIRECTORY (angemeldeter Nutzer) oder CSIDL_DESKTOP (???).



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten