Happymaker Geschrieben 14. Juni 2005 Geschrieben 14. Juni 2005 Hallo! Hab eine wichtige Frage: Mit Hilfe welcher MFC Klasse kann ich eine Datei erstellen und diese dann mit daten füllen??? Ich möchte nämlich eine XML Datei erstellen und diese dann mit meinem Schema + Daten füllen! Bin wirklich über jede Hilfe froh!!! Danke Zitieren
Klotzkopp Geschrieben 14. Juni 2005 Geschrieben 14. Juni 2005 Allgemein CFile, für textbasierte Dateien kannst du CStdioFile benutzen. Zitieren
Happymaker Geschrieben 14. Juni 2005 Autor Geschrieben 14. Juni 2005 Danke! Aber was meinst du mit Textbasiert??? Was ist denn besser für eine XML Datei??? Und gibt es klassen für XML?? Weil so muss ich mir für die XML-Datei alles selber zusammen basteln! Danke Zitieren
Klotzkopp Geschrieben 14. Juni 2005 Geschrieben 14. Juni 2005 Aber was meinst du mit Textbasiert???Keine Binärdaten (vor allem keine Nullzeichen), Sonderbehandlung von Zeilenumbrüchen usw. Allgemein: Was man mit einem Texteditor lesen kann. CStdioFile bietet dir besondere Funktionen zum zeilenorientierten Lesen und Schreiben. Was ist denn besser für eine XML Datei???Da XML nicht zeilenbasiert ist, ist es eigentlich egal. Und gibt es klassen für XML??Sicher, aber nicht in den MFC. Aber sag mal, kann es sein, dass deine Fragezeichentaste klemmt? Oder machst du absichtlich immer mehrere auf einmal? Zitieren
Happymaker Geschrieben 14. Juni 2005 Autor Geschrieben 14. Juni 2005 Danke! Werd CStdioFile benutzen! Hast du da vielleicht einen beispiel code wie ich da eine Datei erstelle? Weil ich in da MSDN bei CStdioFile nichts gefunden habe um eine Datei zu erstellen! Trotzdem danke hast mir schon sehr viel weiter geholfen! Mfg P.S. Nee klemmt nicht bin nur a bissal genervt!*aufdieUhrschau* Zitieren
Klotzkopp Geschrieben 14. Juni 2005 Geschrieben 14. Juni 2005 Hast du da vielleicht einen beispiel code wie ich da eine Datei erstelle? Weil ich in da MSDN bei CStdioFile nichts gefunden habe um eine Datei zu erstellen!Die dafür notwendigen Methoden erbt CStdioFile von seiner Basisklasse CFile. Du kannst die Datei entweder gleich mit dem Konstruktor oder mit der Open-Methode öffnen. Bei der Beschreibung des Konstruktors von CStdioFile findet sich auch ein Beispiel. Zitieren
Timon Geschrieben 15. Juni 2005 Geschrieben 15. Juni 2005 Es gibt XML Klassen fuer Visual C++ 6. Das SOAP Toolkit 3 und MSXML 4. Ansonsten kann ich dir .NET empfehlen. Dort sind XML Dinge weitestgehend gratis zu bekommen. Zitieren
Happymaker Geschrieben 21. Juni 2005 Autor Geschrieben 21. Juni 2005 Hallo leute! Ich bräuchte zu der Klasse CFile bitte eure Hilfe! Am besten wären ein paar Quellcode zeilen wo was in die Datei geschrieben und gelesen wird! Vielen Dank! Zitieren
Bubble Geschrieben 21. Juni 2005 Geschrieben 21. Juni 2005 Warum willst Du unbedingt CFile benutzen? Zitieren
Klotzkopp Geschrieben 21. Juni 2005 Geschrieben 21. Juni 2005 Auch Beispiele stehen in der MSDN Library: http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_cfile.3a3a.open.asp Zitieren
Happymaker Geschrieben 21. Juni 2005 Autor Geschrieben 21. Juni 2005 Danke aber das bringt mir überhaupt nichts! Ich vertehe das zeug von denen nicht! Und außerdem wie soll ich denn einen CString mit CFile schreiben können???? aber das brauch ich so! Gibt es nicht noch andere möglichkeiten um in eine Datei zu schreiben und zu lesen? Zitieren
Happymaker Geschrieben 21. Juni 2005 Autor Geschrieben 21. Juni 2005 @Bubble was gibt es denn sonst noch so? Zitieren
Bubble Geschrieben 21. Juni 2005 Geschrieben 21. Juni 2005 @Bubble was gibt es denn sonst noch so? Plattformübergreifende File I/O Funktionalität gibt es in C++ z.B. mit ofstream und ifstream aus der STL oder den klassischen C File I/O Funktionen (fopen, fwrite, fclose). Zitieren
Happymaker Geschrieben 21. Juni 2005 Autor Geschrieben 21. Juni 2005 Ich muss fopen,fwrite, fclose, fread hernehmen weil es im Windows ce sonst nichts anderes gescheites gibt! Hast du vielleicht Quellcode für mich? Bitte nicht wieder auf die MSDN verweisen-> ich da nichts checken!*g* Und kann ich mit fwrite direkt einen CString in die Datei schreiben??? Danke für deine Hilfe! mfg happy Zitieren
Bubble Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 Gut, hier ein Beispiel für einen C-String, also ein mit 0 terminierten String (kein MFC CString Objekt), und für ein CString Objekt: #include <stdio.h> ... void Beispiel() { char text[] = "Dies ist ein Satz.\n"; CString str("Ein weiterer Satz in einem CString-Objekt."); FILE *f; f = fopen("Datei.txt","w"); // Flags w, b, a, r, usw. bitte in einem C-Buch nachschlagen, eine vollständige Erklärung aller erlaubten Flags wäre an dieser Stelle zu umfangreich if(f!=NULL) { // C-String schreiben: fwrite(text, strlen(text), 1, f); // Inhalt vom CString-Objekt schreiben, verwende LPCTSTR Operator zum Konvertieren in einen C-String: fwrite((LPCTSTR) str, str.GetLength(), 1, f); fclose(f); } } Alles ungetestet und nur als Beispiel aufgeschrieben. Zitieren
Happymaker Geschrieben 22. Juni 2005 Autor Geschrieben 22. Juni 2005 Jetzt ist es so das ich als ergebnis bei einem CString immer ein Leerzeichen zwischen jedem buchstaben habe! Dateiauszug: Dies ist ein Satz. E i n w e i t e r e r S a t z i n Wie kann ich das verhindern? Vielen vielen dank für deine super hilfe! P.S. wo hast du denn solche quellcode beispiele her??? Zitieren
Bubble Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 Das wird daran liegen, dass Dein CString Objekt einen 2-Byte Zeichensatz verwendet (z.B. Unicode) und nicht 7 oder 8 Bit ASCII. (In diesem Fall wird mein Beispiel auch nur die erste Hälfte des Strings in die Datei schreiben, da es in diesem Fall eigentlich doppelt so viele Bytes schreiben müsste. Für den Fall von Multi-Byte-Zeichen musst Du die Anzahl zu schreibender Bytes bei fwrite anpassen.) Wenn dich Multi-Byte Zeichen stören, dann musst Du den String konvertieren. Dabei können aber mit 7/8-Bit-Zeichensätzen nicht darstellbare Zeichen verloren gehen. Zitieren
Bubble Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 P.S. wo hast du denn solche quellcode beispiele her??? Das Beispiel eben? Für den Beitrag rasch selbst geschrieben. Zitieren
Happymaker Geschrieben 22. Juni 2005 Autor Geschrieben 22. Juni 2005 Und was soll ich jetzt schreiben?? Ich verstehs einfach nicht! Trotzdem danke! Zitieren
Bubble Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 Es liegt daran, dass Dein Programm Unicode verwendet. Ich glaube für Windows CE kannst Du es nicht abstellen. Wenn Du dennoch "normale" Textdateien aus CString Objekten erzeugen willst, musst Du die Strings vor dem Schreiben konvertieren, z.B. mit der API Funktion WideCharToMultiByte(...). Alternativ kannst Du auch Unicode Textdateien erzeugen, musst dann aber mit fwrite doppelt so viele Bytes schreiben, wie Dein Strings Zeichen enthält, da jedes Zeichen im Unicode Fall 2 Byte beansprucht. Also in meinem Beispiel die Zeile fwrite((LPCTSTR) str, str.GetLength(), 1, f); durch die Zeile fwrite((LPCTSTR) str, str.GetLength()*2, 1, f); ersetzen. Mit einem normalen Texteditor betrachtet hast Du dann allerdings Abstände zwischen vielen Zeichen. Zitieren
Happymaker Geschrieben 22. Juni 2005 Autor Geschrieben 22. Juni 2005 Danke! Aber ich kann definitief nicht damit leben das ich leerzeichen zwischen den Buchstaben habe! Mal was ganz anderes, Mein Szenario! Ich habe vier Dialoge in denen ich werte eingeben muss. Wie und wo sollte ich denn die variablen der Dialoge speichern damit sie in allen Dialogen verfügbar sind?? Ich meine wenn ich alle Dialoge erfasst habe dann soll ich zugriff auf alle variablen haben. Und diese Werte möchte ich nach dem erfassen eine XML-Datei daraus machen! Gibt es denn keine Klasse mit der ich ein XML-Dokument erzeugen kann?? Das vielleicht schon mit CSrings klar kommt?? Zitieren
Happymaker Geschrieben 22. Juni 2005 Autor Geschrieben 22. Juni 2005 Kann mir keiner weiterhelfen??? Zitieren
Bubble Geschrieben 23. Juni 2005 Geschrieben 23. Juni 2005 Danke! Aber ich kann definitief nicht damit leben das ich leerzeichen zwischen den Buchstaben habe! Das sind keine Leerzeichen! Du verwendest einen 2-Byte Zeichensatz und jedes Zeichen belegt demzufolge 2 Byte und diese beiden Bytes werden von "normalen" Editoren als zwei Symbole dargestellt. Es gibt in dem Zeichensatz auch Zeichen, wo das 2. Symbol kein "Leerzeichen" ist! Wenn Du nur einen 1-Byte (ASCII/ANSI) Zeichensatz verwenden willst, dann musst Du Deinen String selbst umwandeln (denn CString unter Windows CE verwendet einen 2-Byte Zeichensatz, unter Windows könntest Du es einstellen), den Namen einer Windows-Funktion dafür Funktion habe ich Dir bereits geschrieben. Mal was ganz anderes, Mein Szenario! Ich habe vier Dialoge in denen ich werte eingeben muss. Wie und wo sollte ich denn die variablen der Dialoge speichern damit sie in allen Dialogen verfügbar sind?? Speicher sie an einer Stelle, die Dir angemessen erscheint. Es gibt dafür keine festen Regeln. Gibt es denn keine Klasse mit der ich ein XML-Dokument erzeugen kann?? Das vielleicht schon mit CSrings klar kommt?? XML zu schreiben ist eher trivial, das Einlesen ist die Schwierigkeit. Wenn Du .NET verwenden würdest, könntest Du ein DataSet verwenden. Dies kann seinen Inhalt als XML speichern und auch wieder einlesen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.