1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Daten in txt file speichern C++

Discussion in 'Programmieren' started by rote chilli, Dec 16, 2009.

Thread Status:
Not open for further replies.
  1. rote chilli

    rote chilli Kbyte

    Hallo!

    ich wollte ein programm schreiben das daten die ich eingebe (einen text) speichert. und zwar in einem text file. dazu verwende ich folgendes:

    fstream file;
    file.open("text.txt", ios::out);
    file << textv;
    file.close();

    funktioniert ja alles schön und gut, aber wie kann ich den benutzer das verzeichnis bestimmen lassen, beziehungsweise, die .txt datei in die eigenen dokumente speichern lassen??

    und die zweite frage ist wie kann ich die datei wider in eine variable öffnen??
    so:

    fstream file;
    file.open("text.txt", ios::in);
    file >> textv;
    file.close();
    ??

    lg chilli
     
  2. rote chilli

    rote chilli Kbyte

    das mit dem laden hat sich erledigt, jetzt möchte ich nur noch wissen wie ich die dateien immer ins user verzeichnis speichern lassen kann...

    lg chilli
     
  3. Fettbemme

    Fettbemme Halbes Megabyte

    Nun dann kommst Du um die Windows API nicht mehr herum :cool:

    Die Funktion SHGetFolderPath kann genau das machen, was Du möchtest.

    Wenn Du den Parameter nFolder auf CSIDL_PROFILE setzt, bekommst Du das User Verzeichnis. Besser wären aber die Werte CSIDL_APPDATA oder CSIDL_LOCAL_APPDATA für nFolder. Das entspräche dann auch den Microsoft Design Guidlines.
     
  4. rote chilli

    rote chilli Kbyte

    danke , aber verstehe leider nur bahnhof
     
  5. Fettbemme

    Fettbemme Halbes Megabyte

    Nun der Code würde so wie hier von mir angegeben aussehen. Du wirst noch die Header Datei "shlobj.h" in Deine Quelle mit einbinden müssen, und auch die Datei "shell32.lib" im Linker hinzufügen.

    Du hast leider nicht geschrieben was Du als IDE verwendest. Ich verwende VS2008 mit dem Plattform SDK V7.0.

    Code:
    [FONT="Courier New"]
     TCHAR path[MAX_PATH];
    
     <...>
     // Der gewünschte Pfad befindet sich in der Variablen path
     SHGetFolderPath(NULL, CSIDL_PROFILE, NULL, SHGFP_TYPE_CURRENT, path);
     <...>
    
    [/FONT]
     
  6. rote chilli

    rote chilli Kbyte

    danke!
    ich verwende microsoft visual c++ express edition

    aber es erkent tchar, [MAX_PATH], und SHGetFolder nicht.....

    lg chilli
     
  7. Fettbemme

    Fettbemme Halbes Megabyte

    Nun die Express Edition kenne ich nun leider nicht. Ich verwende VS2008 Professional. Von daher meine Behauptungen beziehen sich jetzt auf diese Version.

    Du mußt wie ich es schon sagte in Dein Programm am anfang einfügen:

    #include <shlobj.h>
    #include <tchar-h>

    Das tchar.h ist dann nötig, wenn man Code für ANSI und UNICODE generieren möchte. Anstatt TCHAR sollte auch CHAR funtionieren.

    Es könnte sein, dass Du das Windows SDK Dir runterladen mußt. Google gibt Dir den passenden Link bei MS. Aber wie ich sagte, inwieweit Du das alles in der Express Edition machen kannst weis ich nicht. Die Einschränkungen kenne ich nicht, da ich diese Version nicht nutze.
     
  8. rote chilli

    rote chilli Kbyte

    ok danke jetzt wird nur die headerdatei tchar-h nicht gefunden. lade mir mal SDK runter

    lg chilli
     
  9. Fettbemme

    Fettbemme Halbes Megabyte

    Du kannst auch auf TCHAR verzichten, und die Variable in der Art deklarieren:

    CHAR path[MAX_PATH];
    char path[MAX_PATH];
    ;

    Je nachdem was er dann "frisst". Es kann halt sein, dass die Express Version das Mapping für ANSI und Unicode nicht vorhanden ist, und Du daher keine TCHAR.H hast.
     
  10. rote chilli

    rote chilli Kbyte

    wenn ich auf das tchar verzichte, komen plötzlich ganz viele andere fehler, die nicht von mir ausgeghen...
     
  11. Fettbemme

    Fettbemme Halbes Megabyte

    Wie ich schon sagte ist das TCHAR nur für das UNICODE ANSI Mapping. Als kurze Erklärung, ANSI Strings sind eine verkettung von BYTES / CHARS, also 8 Bit Werten die den String ergeben. Bei Unicode hast Du 16 Bit Werte die verkettet sind, um z.B. chin. Schriftzeichen oder arabische oder von anderen Sprachen darstellen zu können.

    TCHAR ist nut zum Mapping da. Bei UNICODE ist der TCHAR als WXHAR deklariert bei ANSI als CHAR.

    Nenne doch mal ein paar von den Fehlermeldungen, so die ersten 2-3 wären nicht schlecht.
     
  12. rote chilli

    rote chilli Kbyte

    1>f:\c++\vc\include\codeanalysis\sourceannotations.h(47) : error C2011: 'vc_attributes::YesNoMaybe': 'enum' Typneudefinition

    1> c:\programme\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(47): Siehe Deklaration von 'vc_attributes::YesNoMaybe'

    1>f:\c++\vc\include\codeanalysis\sourceannotations.h(57) : error C2011: 'vc_attributes::AccessType': 'enum' Typneudefinition

    die fehler befinden sich in sourceannotations.h
     
  13. Fettbemme

    Fettbemme Halbes Megabyte

    Die Fehlermeldung sagt mir erst einmal gar nichts. Google meinte aber ein "Rebuild all" sprich Projekt komplett neu kompilieren könnte vielleicht helfen.
     
  14. daboom

    daboom Megabyte

    Sieht f&#252;r mich nach fehlerhaften Include-Einstellungen aus, also speziell, als ob

    "f:\c++\vc\include\codeanalysis\sourceannotations.h"
    und
    "c:\programme\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h"

    beide auf dem include Pfad liegen und da beides ja offenbar dieselben Dateien sind, beide auch dasselbe (also mehrfach) deklarieren.

    Das geht so nat&#252;rlich nicht ;)
     
Thread Status:
Not open for further replies.

Share This Page