Datei lesen und schreiben Code geht nicht :(
-
Könnte mir mal einer mein Fehler verraten ich hab mir hier was zusammengewurschtelt, einfach nur eine Datei schreiben und diese dann lesen lassen und den Text ausgeben. In Zeile 34 komt der Fehler:
34 C:\Users\Johannes\Desktop\C++\Datei Schreiben\main.cpp no match for 'operator>>' in 'myFile >> var3'Mhh aber laut der Website hier müsste es gehen:
http://www.cpp-tutor.de/cpp/le04/dateien.htmlNaja gut hier mal mein Code:
#include <cstdlib> #include <iostream> #include <fstream> #include <windows.h> using namespace std; // int var3; // int main(int argc, char *argv[]) { // Datei definieren & Verbinden ofstream myFile ("C:\\test.txt", ios::out|ios::binary); //Fehlerüberprüfung if(!myFile) { MessageBox(NULL,"Keine Datei gefunden","Fehler!", MB_OK | MB_ICONERROR); } else { myFile << "1 "; //Dateiverbindung aufheben myFile.close(); //erneut verbinden //myFile.open("C:\\test.dat"); } myFile.open("C:\\test.txt", ios::in | ios::binary); myFile >> var3; cout << var3; myFile.close(); system("PAUSE"); return EXIT_SUCCESS; }
-
ofstream -> Ausgabe-Strom, ifstream -> Eingabe-Strom.
Wenn du lesen willst, nimm letzteren. Ach ja, warum var3 global?
-
Okay jetz gehts, kann man eigentlich auch Texte untereinander schreiben in der Textdatei? endl; geht nämlich nicht
#include <cstdlib> #include <iostream> #include <fstream> #include <windows.h> using namespace std; int main(int argc, char *argv[]) { { //Datei Definieren/schreiben ofstream myFile("C:\\test.txt", ios::out | ios::binary); //Fehlerprüfen if(!myFile) { MessageBox(NULL,"Keine Datei gefunden","Fehler!", MB_OK | MB_ICONERROR); } else { myFile << "1"; myFile.close(); } } { //Variable int var1; //Datei lesen & ausgeben ifstream myFile("C:\\test.txt", ios::in | ios::binary); myFile >> var1; cout << var1 << endl; myFile.close(); } system("PAUSE"); return EXIT_SUCCESS; }
-
Waterfront_xD schrieb:
Okay jetz gehts, kann man eigentlich auch Texte untereinander schreiben in der Textdatei? endl; geht nämlich nicht
Klar, ginge endl. Du schreibst aber doch bloß eine Zeile, was erwartest du dann?
Aber endl ist gerade im Zusammenhang mit Dateien falsch, wenn man nur einen Zeilenumbruch ('\n') möchte. endl entspricht Zeilenumbruch + flush. Einen flush möchtest du niemals ohne Grund durchführen, ganz besonders nicht bei Dateien. Da es eigentlich so gut wie nie Gründe für ein flush gibt, kannst du dir auch angewöhnen, immer '\n' zu nehmen, wenn du einen Zeilenumbruch willst, nie endl.
-
Gut also ich hab jetzt einfach hinter der 1 ein \n gemacht:
Dann lasse ich mir die 3 Zahlen untereinander in der Console ausgeben.
Wenn ich aber in die Datei gucke stehen die 3 Zahlen nebeneinander und nicht untereinander. Warum?#include <cstdlib> #include <iostream> #include <fstream> #include <windows.h> using namespace std; int main(int argc, char *argv[]) { { //Datei Definieren/schreiben ofstream myFile("C:\\test.txt", ios::out | ios::binary); //Fehlerprüfen if(!myFile) { MessageBox(NULL,"Keine Datei gefunden","Fehler!", MB_OK | MB_ICONERROR); } else { myFile << "1\n " << "2\n " << "3\n "; myFile.close(); } } { //Variable int var1, var2, var3; //Datei lesen & ausgeben ifstream myFile("C:\\test.txt", ios::in | ios::binary); myFile >> var1 >> var2 >> var3; cout << var1 << endl << var2 << endl << var3; myFile.close(); } system("PAUSE"); return EXIT_SUCCESS; }
-
Weil du grundlos
ios::binaryals Flag fuer das erstellen des Filestreams verwendest. Weisst du eigentlich was das macht? Nein? Dann benutze es auch nicht auf gut Glueck.Zur Erklaerung: Ohne
ios::binarykoennen Dateistreams noch an den gelesenen und geschriebenen Daten etwas rumfummeln. In dem Fall beispielsweise den C++-Zeilen-Seperator\nauf Windows-Systemen in den dort gaengigen Zeilen-Seperator\r\numwandeln oder halt umgekehrt beim lesen (auch wenn ein halbwegs vernuenftiger Editor auch mit blossem\nzurecht kaeme).ios::binarymacht meistens nur dann Sinn, wenn du wirklich Binaerdaten schreiben und lesen willst willst. Dort waere es naemlich unpraktisch, wenn du ein0x0A (\n)hast und der Stream dir ein0x0D 0x0A (\r\n)draus macht.
-
Ahh cool danke
