fstream | datei die ganze zeit auslesen



  • hallo,

    ich schreibe gerade ein kleines test-programm welches die ganze zeit
    eine txt-datei auslesen soll und den inhalt ausgeben soll.

    wird etwas an die txt-datei angehängt soll dies auch ausgegeben werden.

    ich habe dazu folgendes geschrieben:

    #include <windows.h>
    #include <stdio.h>
    #include <iostream.h>
    #include <fstream.h>
    
    int main()
    {
    	ifstream in;
    	int seekg=0;
    	char kl[500]="e:\\test.txt";
    	char buf[500];
    
    	// open
    	in.open(kl, ios::in);
    	if(in==0)
    	{
    		cout << "Error!\n" << flush;
    		return 0;
    	}
    
    	while(1)
    	{
    		// read
    		in.read(buf,10);
    		buf[in.gcount()]='\0';
    
    		// senden
    		if(in.gcount()>0)
    		{
    			cout << buf << flush;
    		}
    
    		// warten
    		Sleep(1000);
    	}
    
    	// closen
    	in.close();
    
    	return 1;
    }
    

    der inhalt der schon in der txt-datei steht wird ausgegeben - wenn allerdings
    neuer hinzukommt nicht!

    warum?

    danke euch 🙂 Babel

    p.s:

    warum kommt bei

    // open
        in.open(kl, ios::in);
        if(in==0)
        {
            cout << "Error!\n" << flush;
            return 0;
        }
    

    eig. nie ein fehler? mein programm erstellt die datei wenn sie
    nicht vorhanden ist! warum? 🙂



  • p.s:

    warum kommt bei

    // open
        in.open(kl, ios::in);
        if(in==0)
        {
            cout << "Error!\n" << flush;
            return 0;
        }
    

    eig. nie ein fehler? mein programm erstellt die datei wenn sie
    nicht vorhanden ist! warum? 🙂

    Frag die datei so ab!

    in.open(kl, ios::in);
        if(in.is_open())
        {
            // Datei bearbeiten..
        } else cout << "Error!\n" ...
    

    Bei dem anderen kann ich leider nicht helfen.



  • Du öffnest die Datei einmal und liest dann deren Inhalt - wie weit dich dein System später über Änderungen informiert, liegt dann in dessen Hand. Wenn du sicher sein willst, immer die aktuelle Version deiner Datei vorliegen zu haben, solltest du sie schließen (close()) und neu öffnen (open()).

    Btw, du hast einen Buffer für 500 Byte - warum ließt du dann deine Datei in 10-Byte-Blöcken ein?



  • CStoll schrieb:

    Du öffnest die Datei einmal und liest dann deren Inhalt - wie weit dich dein System später über Änderungen informiert, liegt dann in dessen Hand.

    Falls das System so freundlich ist und die Änderungen weiterreicht, genügt es, wenn man die Fehlerbits (die ja nach dem kompletten Lesen der Datei gesetzt sind) des Streams zurücksetzt.
    Sprich:

    while(1)
        {
            // read
            in.read(buf,10);
            buf[in.gcount()]='\0';
    
            // senden
            if(in.gcount()>0)
            {
                cout << buf << flush;
            }
            if (!in) {
               in.clear();
            }
            // warten
            Sleep(1000);
        }
    

Anmelden zum Antworten