Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute.

Mein Visual C++ 6.0 wurde auf Visual C++ .NET umgestellt und da ergeben sich einige Probleme.

Die Dateiarbeit habe ich bisher mit fstream.h (ifstream zum lesen, ofstream zum schreiben) gemacht, jetzt muss ich das mit CFile tun.

Mit "cf.Open(CDDrive+"ncc.html", CFile::modeRead, NULL))" versuche ich eine Datei auf dem CD-ROM-LW zu öffnen, das funktioniert aber nicht.

Muss ich den Pfad in einer Variablen schreiben?

In einer while-Schleife möchte ich das Ende der Datei abfragen. Mit fstream.h ging das so:

ifstream lesen;

lesen.open(Datei);

while(!lesen.eof())

{...}

Geschrieben
Original geschrieben von Narf!

Die Dateiarbeit habe ich bisher mit fstream.h (ifstream zum lesen, ofstream zum schreiben) gemacht, jetzt muss ich das mit CFile tun.

Ich wüsste nicht, wieso. Es reicht wahrscheinlich völlig aus, wenn du

#include <fstream>

(also ohne .h) benutzt. Die Headerdateien mit .h sind einfach nur veraltet und werden von VC7.1 nicht mehr unterstützt.

Geschrieben

Ich habe jetzt #include <fstream> drin stehen, aber er kennt jetzt ifstream und ofstream nicht, obwohl die auch in der Hilfe bei fstream als Member drin stehen.

Geschrieben

Alle Klassen der "neuen" Standardheader stehen im Namespace std.

Also entweder überall

std::ifstream

schreiben, oder am Anfang

using std::ifstream; // für jede verwendete Klasse

oder (Rundumschlag)

using namespace std;

Geschrieben

Habe das mit dem using namespace gemacht, läuft prima bis auf eine winzige Kleinigkeit ;) :

CString CDDrive="F:\\";

ifstream lesen;

Ich versuche mit lesen.open(CDDrive+"Dateiname", ios::out); eine Datei zu öffnen.

if(!lesen)

{...}

Es wird jedesmal in die if-Anweisung gesprungen, obwohl die Datei vorhanden ist.

Geschrieben

Ich habe es in ios::in geändert und es funktioniert.

Nun noch die andere Seite:

ofstream schreiben;

schreiben.open(LW+"\\Datei", ios::ate);

//Datei öffnen und neue Daten am Ende anhängen.

Die Datei wird geöffnet, jedoch der Inhalt gelöscht und mit dem neuen Inhalt überschrieben.

Geschrieben
Original geschrieben von Narf!

schreiben.open(LW+"\\Datei", ios::ate);

//Datei öffnen und neue Daten am Ende anhängen.

Die Datei wird geöffnet, jedoch der Inhalt gelöscht und mit dem neuen Inhalt überschrieben.

Hmm, wie wäre es mit ios::app! ;)

ios::ate geht nur ans Ende!

Geschrieben

Hat geklappt. Und, wie sollte es anders sein, habe ich ein neues Problem:

lesen.open(MainPth+"\\Datei", ios::in); //Öffnen einer Datei mit Pfadangeben

while(!lesen.eof())

{

lesen.getline(lese, 20); //lesen der Pfadangabe

if(lese[0]!='\0')

{

a=0;

mp3.open(lese, ios::in); //öffnen der Pfadangabe

while(!mp3.eof())

{

mp3.getline(lesemp3, 300); //lesen aus der Datei in der Pfadangabe

if(lesemp3[0]!='\0')

...

}

mp3.close();

...

Beim ersten Durchlauf funktioniert alles prima. Beim zweiten und allen weiteren Durchläufen passiert das:

Die Pfadangabe wird gelesen, die Datei wird geöffnet, aber bei der Abfrage nach dem Dateiende wird es als wahr gewertet und zu mp3.close() gesprungen, obwohl die Datei gerade erst geöffnet wurde und sich auch etwas in der Datei befindet.

Geschrieben

Ja, die erste solange Pfadangaben in der Datei existieren und die zweite solange, wie sich Zeilen in der zweiten Datei befinden.

Nach jedem Schleifendurchlauf wird die zweite mit mp3.close() geschlossen und dann wieder geöffnet, nachdem in der ersten wieder eine neue Zeile gelesen wird, da sich dort die Pfadangabe befindet, mit der ich die zweite öffne.

Geschrieben

Schließen und anschließendes Wiederöffnen setzt das eof-Flag nicht zurück.

Am einfachsten umgehst du das, indem du immer wieder eine neue ifstream-Instanz erzeugst. Du kannst die Parameter von open auch gleich im Konstruktor angeben:

ifstream lesen(MainPth+"\\Datei", ios::in);

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