Stream schreiben, lesen



  • Sorry für doppelpost.

    edit:

    Wenn ich das schreibe:

    ifstream infile;
    	/*ofstream outfile;
    	outfile.open("new.txt");
    	outfile << "DDD";
    */
    	infile.open("new.txt");
    	cout << &infile;
    

    dann wird zwar etwas in der Konsole ausgegeben, aber ist nicht,das was ich wollte:

    0012FEAC
    

    ich hab also die new.txt Datei schon vorher durch outfile.open("new.txt") erstellt, dann hab ich es auskommentiert, dann hab ich eiinen Text manuell bzw. selbstgeschrieben und nun infile geöffnet(also new.txt) und wollte mit der Standardausgabe infile ausgeben, also was in der Datei steht.

    P.s: dies betrifft nicht mein problem, dass es nicht in der Datei steht, was ich mit outfile.open("new.txt") gemacht hab. Aber über Lösungen der beiden probleme würde ich mich freuen 😉



  • Ich kann deinen Fehler nicht nachvollziehen. Folgendes Minimalprogramm erfüllt bei mir mit dem MinGW-Compiler den erwünschten Zweck.

    #include <fstream>
    
    int main()
    {
        std::ofstream out("new.txt");
        out << "Text";
    }
    

    Und das Zweite erreichst du mit folgendem Code.

    #include <fstream>
    #include <iostream>
    
    int main()
    {
        std::ifstream in("new.txt");
        std::cout << in.rdbuf();
    }
    


  • OhneName schrieb:

    Ich kann deinen Fehler nicht nachvollziehen. Folgendes Minimalprogramm erfüllt bei mir mit dem MinGW-Compiler den erwünschten Zweck.

    #include <fstream>
    
    int main()
    {
        std::ofstream out("new.txt");
        out << "Text";
    }
    

    Das erste funktioniert bei mir nicht, d.h dass nichts in der Datei "new.txt" drinnensteht, sie ist einfach nur leer.
    Ich arbeite mit der kostenlosen version von microsoft, Vc++ 2005(express edition)

    OhneName schrieb:

    Und das Zweite erreichst du mit folgendem Code.

    #include <fstream>
    #include <iostream>
    
    int main()
    {
        std::ifstream in("new.txt");
        std::cout << in.rdbuf();
    }
    

    Das funzt wunderbar, danke 😃
    aber gibts nicht mehr solcher Sachen, wie ".rdbuf()" ? Welche funcs gibts noch?

    Mfg



  • Dann probier's mal so. Endl kopiert den Ausgabepuffer in die Datei.

    #include <fstream>
    
    int main()
    {
        std::ofstream out("new.txt");
        out << "Text" << std::endl;
    }
    

    Zum anderen:
    http://www.cppreference.com/



  • thx ⚠

    void X(std::string name)
    {
    	std::ifstream address;
    	address.open(name.c_str());
    	std::cout << address.rdbuf() << std::endl;
    }
    
    int main(int argc, _TCHAR* argv[])
    {
    	std::cout << "Willkommen\n" << std::endl;
    	X("datei.txt");
    	std::cin.get();
    	return 0;
    }
    

    wieso kommt da nur "Willkommen" und der Rest der Datei nimmer? Ich hab ne datei.txt ja im exe verzeichnis, und da ist schon was reingeschrieben worden 😕



  • Also bei mir funktioniert das bestens. Du solltest aber vielleicht noch prüfen, ob die Datei auch korrekt geöffnet wurde. Vielleicht macht dir ja noch irgend n Schreibschutz oder so Probleme.

    #include <iostream>
    #include <fstream>
    
    void printFile(std::string fileName)
    {
        std::ifstream in(fileName.c_str());
        if(!in)
        {
            std::cerr << "Konnte Datei nicht öffnen." << std::endl;
        }
        else
        {
            std::cout << in.rdbuf() << std::endl;
        }
    }
    
    int main()
    {
        std::cout << "Willkommen" << std::endl;
        printFile("datei.txt");
        std::cin.get();
    }
    


  • hmm sollte eig. auch sowas gehen:

    #include <iostream>
    #include <fstream>
    
    void read_file(std::ostream&, const std::string&);
    
    int main()
    {
        std::cout << "Willkommen, " << std::endl;
        read_file(std::cout, "adresse.info");
        std::cin.get();
    }
    
    void read_file(std::ostream& out, const std::string& file_name)
    {
        std::ifstream file(file_name.c_str());
        out << (!file ? "FEHLER: Datei konnte nicht geoeffnet werden!" : file.rdbuf());
    }
    


  • @(D)Evil: Der Ansatz ist ja nicht schlecht, wird aber imho nicht durch den Compiler gelangen - ?: verlangt, daß die beiden letzten Operanden kompatible Typen haben und der kleinste gemeinsame Nenner von 'char*' und 'file_buf*' ist void* (was nur Müll ausgeben würde). Da bleibt dir wohl nur, if() zu verwenden.



  • CStoll schrieb:

    ?: verlangt, daß die beiden letzten Operanden kompatible Typen

    Aha 🙂 was neues gelernt ...



  • Ok ... dann so:

    std::ostream& read_file(std::ostream& out, const std::string& file_name)
    {
        std::ifstream file(file_name.c_str());
    	if (!file)
    	{
    		std::cerr << "FEHLER: Datei konnte nicht gefunden werden!" << std::endl;
    		out.setstate(std::ios::failbit);
    		return out;
    	}
    	return out << file.rdbuf();;
    }
    

    ...



  • Warum alles so kompliziert???

    #include<iostream>
    #include<fstream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
        string string_in;//der string indem dann der Text gespeichert wird 
        ifstream file;//file--> der name deines Streams
        file.open("file.txt",ios::in);//dateiname . und dann die Funktion open("hier dann deine Datei Adresse",ios::in);oder ios::out zum hinneinschreiben
        if(!file){cout<<"Sie haben scheiße gebaut!!!(zB die Datei file.txt ist falsch benannt)"<<endl;}
        file>>string_in;//eigentliches einlesen der Datei
        cout<<string_in;//aufdem Bildschirm ausgeben des Strings
    }
    


  • Ehm ja der Sinn deines Beitrages ist fraglich ^^
    Aber ok ... ne was du da machst geht nur, wenn der Inhalt der Datei keine ' ' enthält ... dann hat std::ifstream auch einen Konstruktor der den Dateinamen annimmt. Die Datei schließt sich automatisch beim zerstören des Objektes.


Anmelden zum Antworten