Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit fstream

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.08.2008, 23:42 Uhr
Arrows



Hallo, ich hab beschlossen mir eine Art Mini Firewall zu proggen, der mich warnt, wenn jemand auf einem bestimmten Port zugreift.

Als erstes ruf ich die Windows Netstat funktion auf, die mir eine Datei mit dem aktuellen offenen Verbindungen speichert. Ich öffne die Datei, lies sie aus, und such nach der Portnummer, also:

C++:
while(true)
    {
        system("netstat >nestat.txt"); // Neue Datei erzeugen
        netstat_file.open("nestat.txt", ios::in);
        cout << "New File Created" << endl;


        while(!netstat_file.eof())
        {
            netstat_file.getline(zeile, 1023); // Auslesen
            output = output + zeile + "\n";
        }


        cout << "Searching..." << endl;
        attention = output.find("Status"); // "Status" steht in jeder Datei,
        if(attention != -1) // ohne dass das ich im Inet sein muss
        {
            cout << "found entry" << endl << endl;
            attention = -1;
        }
        output = "";
        netstat_file.close();
    }


Tja, das Problem ist dass genau einmal ausgelesen wird und danach ist output sowie zeile leer, irgendwie kommt es mir vor dass die Datei schon am Ende geöffnet wird

Könnt ihr mir sagen wo das Problem liegt?
--
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

Dieser Post wurde am 31.08.2008 um 23:43 Uhr von Arrows editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.08.2008, 23:54 Uhr
0xdeadbeef
Gott
(Operator)


Meine erste Vermutung wäre, dass der system-Aufruf daneben geht. Was steht denn in der Datei drin?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.09.2008, 00:16 Uhr
Kest
saint


Hi!

Das gehört zwar nicht in Standard-Rubrik, aber...



C++:
while(!netstat_file.eof())
        {
            netstat_file.getline(zeile, 1023); // Auslesen
            output = output + zeile + "\n";
        }
        netstat_file.clear();

Auch wenn ich so etwas nie geschrieben hätte Musste halt mit >netstat_file.clear();< das "eofbit" löschen, weil sonst "goodbit" nicht gesetzt ist, und jede folgende Operation schiefgeht.

So etwas wäre ein wenig knackiger:

C++:
#include <algorithm>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>


int main() {
    std::system("netstat >nestat.txt");
    std::ifstream net_file("nestat.txt");
    typedef std::istream_iterator<std::string> Iter;
    Iter ii(net_file), eof;
    Iter f = std::find(ii, eof, std::string("Status"));
    if(f != eof)
         std::cout << "gefunden" << std::endl;
}

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 01.09.2008 um 00:17 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.09.2008, 00:28 Uhr
Arrows




Zitat von 0xdeadbeef:
Meine erste Vermutung wäre, dass der system-Aufruf daneben geht. Was steht denn in der Datei drin?


Nein, der stimmt


Zitat von Kest:

Hi!

Das gehört zwar nicht in Standard-Rubrik, aber...


C++:
while(!netstat_file.eof())
{
netstat_file.getline(zeile, 1023); // Auslesen
output = output + zeile + "\n";
}
netstat_file.clear();


Auch wenn ich so etwas nie geschrieben hätte Musste halt mit >netstat_file.clear();< das "eofbit" löschen, weil sonst "goodbit" nicht gesetzt ist, und jede folgende Operation schiefgeht.

So etwas wäre ein wenig knackiger:
C++:
#include <algorithm>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>


int main() {
std::system("netstat >nestat.txt");
std::ifstream net_file("nestat.txt");
typedef std::istream_iterator<std::string> Iter;
Iter ii(net_file), eof;
Iter f = std::find(ii, eof, std::string("Status"));
if(f != eof)
std::cout << "gefunden" << std::endl;
}



Danke vielmals, mit netstat_file.clear() gehts
--
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

Dieser Post wurde am 01.09.2008 um 00:29 Uhr von Arrows editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.09.2008, 01:00 Uhr
0xdeadbeef
Gott
(Operator)


Aaaah, das selbe fstream-Objekt wird in der Schleife immer und immer wieder benutzt.

Bin ja manchmal auch blind...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: