Narf! Geschrieben 8. Oktober 2003 Geschrieben 8. Oktober 2003 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()) {...} Zitieren
Klotzkopp Geschrieben 8. Oktober 2003 Geschrieben 8. Oktober 2003 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. Zitieren
Narf! Geschrieben 9. Oktober 2003 Autor Geschrieben 9. Oktober 2003 Dann noch was: Wenn ich ein Programm mit Dateiarbeit entwickle, muss ich da auf Rechtevergabe achten? Das Programm erstellt ändert und löscht Dateien. Zitieren
Narf! Geschrieben 9. Oktober 2003 Autor Geschrieben 9. Oktober 2003 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. Zitieren
Klotzkopp Geschrieben 9. Oktober 2003 Geschrieben 9. Oktober 2003 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; Zitieren
Narf! Geschrieben 10. Oktober 2003 Autor Geschrieben 10. Oktober 2003 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. Zitieren
Klotzkopp Geschrieben 10. Oktober 2003 Geschrieben 10. Oktober 2003 Irgendwie passen ifstream und ios::out nicht recht zusammen... Zitieren
Narf! Geschrieben 13. Oktober 2003 Autor Geschrieben 13. Oktober 2003 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. Zitieren
GrEnE Geschrieben 15. Oktober 2003 Geschrieben 15. Oktober 2003 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! Zitieren
Narf! Geschrieben 15. Oktober 2003 Autor Geschrieben 15. Oktober 2003 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. Zitieren
Klotzkopp Geschrieben 15. Oktober 2003 Geschrieben 15. Oktober 2003 Benutzt du immer wieder dieselbe lesen-Instanz? Zitieren
Narf! Geschrieben 16. Oktober 2003 Autor Geschrieben 16. Oktober 2003 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. Zitieren
Klotzkopp Geschrieben 16. Oktober 2003 Geschrieben 16. Oktober 2003 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); Zitieren
Narf! Geschrieben 17. Oktober 2003 Autor Geschrieben 17. Oktober 2003 Klappt alles prima. Danke. 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.