Announcement

Collapse
No announcement yet.

aus DLL heraus ein File schreiben / lesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • aus DLL heraus ein File schreiben / lesen

    Hallo zusammen,

    ich programmiere eine DLL mit Visual Studio C++ und möchte aus der DLL heraus eine Datei speichern & lesen, in der Default-Einstellungen stehen.

    Wie macht man das am Besten ?

    Kann ich dafür System::IO benutzen und wenn ja, was muss ich includen ?

    Man könnte Default-Einstellungen auch in XML Dateien speichern (als key-value pair), aber wie macht man das ?

    Vielen Dank im Voraus

    Peter

  • #2
    Auch hallo,

    vielleicht können einige Ideen aus diesem Thread weiterhelfen: http://www.c-plusplus.de/forum/viewt...s-fstream.html
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Die Standard WIN 32 Methoden sind

      CreateFile
      ReadFile
      WriteFile

      Wenn du einen XML-Parser hast kann auch XML erzeugt werden, jedoch nicht in Key/Value Paaren, sondern XML-konform
      Christian

      Comment


      • #4
        Markus, Christian, danke für die Infos.

        Da ich ja eigentlich Preferences speichern will, frage ich mich (sonst nur auf Mac programmierend), wie das bei PC Programmen normalerweise gehandhabt wird.

        Gibt es spezielle Orte, wo Preferences gespeichert werden ?
        Gibt es für Preferences vielleicht sogar eine spezielle API (wie beim Mac) ?

        Peter

        Comment


        • #5
          In der Registry landet sowas bei Windows
          Christian

          Comment


          • #6
            Oder moderner im %Appdata%-Verzeichnis um die Registry nicht zu sehr vollzumüllen. Jedoch steht %Appdata% nicht unter alten Windows-Versionen zur verfügung. Dort nimmt man das Anwendungsverzeichnis.

            Comment


            • #7
              Oder moderner im %Appdata%-Verzeichnis um die Registry nicht zu sehr vollzumüllen. Jedoch steht %Appdata% nicht unter alten Windows-Versionen zur verfügung. Dort nimmt man das Anwendungsverzeichnis.
              Ja, jetzt werden immer mehr Orte des Betriebssystems mit Anwendungsdaten zu gemüllt.
              Was waren das für Zeiten, als man ein Betriebssystem wechseln konnte und danach nicht endlose Installationsorgien erforderlich waren.

              Die Vermischung von BS mit Anwendungsdaten ist einfach schlecht.
              Christian

              Comment


              • #8
                Habe etwas mit Registry rumgespielt und das tut's ganz gut.

                Aber noch mal zum *moderneren* AppData Ordner:

                Wie kann ich denn für den Rechern, auf dem mein Programm läuft, programmatisch den Pfad ermitteln, der zum AppData Ordner führt ? Das ist ja dann abhängig vom aktuellen User. Kann man das in runtime ermitteln ? (kann man bestimmt, aber wie?)

                Peter

                Comment


                • #9
                  Win 32 API

                  SHGetSpecialFolderLocation
                  Christian

                  Comment


                  • #10
                    Ich versuche bisher vergeblich mit CreateFile() in den AppData einen Test zu speichern. In "normale" Ordner tut's das aber nicht beim AppDataFolder. Der Ordner ist ja hidden, muss ich da was spezielles machen ?

                    Hier ist mein Code:

                    Code:
                    // path holen
                    TCHAR pathToAPPDATAFolder[MAX_PATH];
                    LPITEMIDLIST pidl;
                    IMalloc *pMalloc;
                    SHGetMalloc(&pMalloc);
                    SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl);
                    SHGetPathFromIDList(pidl, pathToAPPDATAFolder);
                    pMalloc->Free(pidl);
                    
                    // path zusammenbauen
                    char pathToText[MAX_PATH];
                    sprintf ( pathToText, "%s%s", pathToAPPDATAFolder, "\\text.txt" );
                    
                    // Text speichern
                    
                    HANDLE file = CreateFile( pathToText, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL );
                    Peter

                    Comment


                    • #11
                      Ja, das muss in Createfile in die FileAttributes rein
                      Christian

                      Comment


                      • #12
                        Eine Datei direkt in den %APPDATA% Ordner zu speichern, das tut's jetzt.


                        Aber wenn ich die Datei in einen Unterordner speichern will, bekomme ich die Fehlermeldung "INVALID_HANDLE_VALUE". Den Pfad erzeuge ich so (dabei ist pathToAPPDATAFolder der Pfad zum %APPDATA% Ordner):

                        Code:
                        sprintf ( path, "%s%s", pathToAPPDATAFolder, "\\TestOrdner\\Test.txt" );
                        Muss man erst einen leeren Ordner erzeugen ?

                        Comment


                        • #13
                          sprintf
                          hat in C++ eigentlich nichts mehr zu suchen

                          Ja, wenn der Ordner nicht da ist...
                          Christian

                          Comment

                          Working...
                          X