Datei kopieren



  • Dann zeig doch mal deinen Code her 😉
    Mit SHGetFolderPath und CSIDL_STARTUP sollte es aber einfach gehen 🤡



  • flenders schrieb:

    Dann zeig doch mal deinen Code her 😉
    Mit SHGetFolderPath und CSIDL_STARTUP sollte es aber einfach gehen 🤡

    es geht ja auch, aber der gibt dann nur entweder true oderfalse zurück! Und ich brauche ja den Pfad!



  • Na der wird doch in den Buffer, den Du der Funktion als letzten Parameter übergibst, gespeichert!

    MSDN schrieb:

    pszPath
    [out] Pointer to a null-terminated string of length MAX_PATH which will receive the path. If an error occurs or S_FALSE is returned, this string will be empty.



  • Hepi schrieb:

    Na der wird doch in den Buffer, den Du der Funktion als letzten Parameter übergibst, gespeichert!

    MSDN schrieb:

    pszPath
    [out] Pointer to a null-terminated string of length MAX_PATH which will receive the path. If an error occurs or S_FALSE is returned, this string will be empty.

    danke, es klappt! Deas Autostartverzeichnis wird richtig angezeigt!



  • Ulf schrieb:

    danke, es klappt! Deas Autostartverzeichnis wird richtig angezeigt!

    ...wie nicht anders zu erwarten war.



  • gut, ich bin doch noch nicht gans am ende 😃
    mein ziel war ja, eine datei in ein Autostartverzeichnis zu verschieben, oder zu kopieren. Hier ist mein Quelltext:

    #include <windows.h>
    #include <iostream>
    #include <shlobj.h>
    #include <fstream>
    
    using namespace std;
    
    void main()
    {
    CHAR path[MAX_PATH];
    
     LPITEMIDLIST pidl;
      if(SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP, &pidl) != NOERROR)
      {
    	   SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP, &pidl);
      }
    
        if(!SHGetPathFromIDList(pidl, path))
      {
    	   SHGetPathFromIDList(pidl, path);
      }
      cout << path << endl << endl;
    
      ifstream FileInCopy("alt\\test.txt", ios::binary);
      ofstream FileOutCopy(path, ios::binary);
    
    	  if(FileInCopy)
    	  {
    		  FileOutCopy << FileInCopy.rdbuf();
    		  cout << "OK, Datei verschoben...\n\n";
    	  }
    	  else
    	  {
    	  cout << "ERROR beim Verschieben!\n\n";
    	  }
    
      Sleep(1000);
    
    }
    

    in dem Ordner alt liegt die Datei test.txt
    das mit dem verschieben und so klappt auch, habe auch schon probiert, nur wenn ich als ziel die variable path angebe (wo der Pfad des Autostartes ist), dann wird zwar angezeigt, dass die Datei verschoben ist, im Autostartverzeichnis ist allerdings nix!

    Könnt ihr mir sagen, was falsch ist? Könnte es daran liegen, dass der Pfad des Autostartes nicht so formatiert wurde, wie esa gebraucht wird?



  • 1.) Warum verwendest du nicht direkt die Funktionen, die du gesagt bekommen hast (sowohl zum ermitteln des Verzeichnisses, als auch zum Verschieben)
    2.) Ich kenne das mit FileInCopy / FileOutCopy nicht, aber bei den WinAPI-Funktionen muss man afaik beim Ziel den Dateinamen wieder mit angeben. Außerdem solltest du nach Möglichkeit mit absoluten Pfadangaben arbeiten



  • Hi nochmal.
    Ich hab Dir mal alle Links zusammengesucht, ist doch bereits alles mit Beispielen dokumentiert.

    1. Dateien KOPIEREN oder Umbenennen http://www.win-api.com/index.php?content=resources&mode=5&ttid=42
    Interessant ist für Dich vielleicht auch:
    2. Datei aus der Ressource KOPIEREN http://www.win-api.com/index.php?content=resources&mode=5&ttid=101
    3. Spezielle Verzeichnisse herausbekommen (z.B. Autostart-Verzeichnis) http://win-api.com/index.php?content=resources&mode=5&ttid=105
    4. Den Pfad des Ordners herausfinden, in dem das Programm läuft http://win-api.com/index.php?content=resources&mode=5&ttid=104

    Jo, diese sollten für dich interessant sein.



  • strcpy(strrchr((const char *)szProgramPath, '\')+1, "");

    Warum nicht einfach so:

    *(strrchr(szProgramPath,'\\')+1) = 0;
    


  • Weil ich's wurscht finde... Ausserdem kannste bei meinigem Beispiel einfach

    ... '\')+1, "Meine Datei"); dranhängen, dann hast Du direkt eine andere Datei angehängt an den String.


Anmelden zum Antworten