Zum Inhalt springen

MFC C++ Eine Datei erzeugen und diese dann mit Daten füllen!


Empfohlene Beiträge

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? ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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*

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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???

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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??

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...