Stream schreiben, lesen



  • 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