Veröffentlicht 8. Oktober 200321 j 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()) {...}
8. Oktober 200321 j 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.
9. Oktober 200321 j Autor Dann noch was: Wenn ich ein Programm mit Dateiarbeit entwickle, muss ich da auf Rechtevergabe achten? Das Programm erstellt ändert und löscht Dateien.
9. Oktober 200321 j Autor 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.
9. Oktober 200321 j 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;
10. Oktober 200321 j Autor 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.
13. Oktober 200321 j Autor 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.
15. Oktober 200321 j 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!
15. Oktober 200321 j Autor 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.
16. Oktober 200321 j Autor 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.
16. Oktober 200321 j 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);
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.