Problem z wczytywaniem danych z pliku

Problem z wczytywaniem danych z pliku
DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Opis problemu w komentarzu kodu.

Kopiuj
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <curl/curl.h>
#include<stdlib.h>
using namespace std;
void get_page( const char* url, const char* file_name )
{
  CURL* easyhandle = curl_easy_init() ;
 
  curl_easy_setopt( easyhandle, CURLOPT_URL, url ) ;
 
  std::FILE* file = std::fopen( file_name, "w" ) ;
  curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file ) ;
 
  curl_easy_perform( easyhandle );
 
  curl_easy_cleanup( easyhandle );
}
 
int main()
{
    ifstream IPlog;
    bool good();
    string liniaIP,myIP[65000],szukfraza="<ip_address>";
    size_t found;
    int i=0;
    
  get_page( "http://www.domaintools.com/research/my-ip/myip.xml",
            "daneIP.txt" ) ;
            
             
                    
 
IPlog.open( "daneIP.txt");

            if( IPlog.good() == true )
            {
             cout << "Uzyskano dostep do pliku!" <<endl;
                          
                 while(!IPlog.eof()) {                           
                    getline(IPlog,liniaIP);  
                   cout<<liniaIP.length()<<endl;                   // w tym miejscu sypie się program, program zwraca 0  i wyskakuje "program przestał działać"
                   found = liniaIP.find(szukfraza);
                            if (found!=0) {               
                                       myIP[i]=liniaIP.substr(found+szukfraza.length(),liniaIP.length()- ((2*szukfraza.length())+1)); //+1 bo końcowy znacznik to </ip_adress>
                                       cout<<myIP[i]<<endl;
                                         }
                      
                       i++;                    
                                     
                                    }
                                   
             IPlog.close();
    
             } 
             
             
              else cout << "Brak Dostępu do pliku!" <<endl;
            system("pause");
}

Dostęp do pliku działa, pokazuje się komunikat...sprawdzałem to wszystko na zwykłym stringu i działało, niestety w momencie w którym chce czytać z pliku zaczynają się schody.

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1571
0

Bo eof() służy do czego innego i u mnie też takie coś nie działa. Zamiast !eof() wstaw good().

DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Nadal nie działa program się sypie w tym samym miejscu... a EOF() to chyba poprawne, bo działa póki jest co czytać w pliku ...

DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Niestety, Nadal nie mogę znaleźć rozwiązania. :( :(

tomepaw
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Lublin
  • Postów: 218
0

Flaga eof jest ustawiana przy PRÓBIE odczytania za końcem pliku, spróbuj jeszcze przed linijką
cout<<liniaIP.length()<<endl;<
wstawić if(IPlog.good())

DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Wstawiłem jak mówiłeś if IPlog.good(); i objąłem reszte klamrą, wychodzi na to ze nie jest "good":D hehe bo program nie wchodzi w IF-a.

Kopiuj
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <curl/curl.h>
#include<stdlib.h>
using namespace std;
void get_page( const char* url, const char* file_name )
{
  CURL* easyhandle = curl_easy_init() ;
 
  curl_easy_setopt( easyhandle, CURLOPT_URL, url ) ;
 
  std::FILE* file = std::fopen( file_name, "w" ) ;
  curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file ) ;
 
  curl_easy_perform( easyhandle );
 
  curl_easy_cleanup( easyhandle );
}
 
int main()
{
    ifstream IPlog;
    bool good();
    string liniaIP,myIP[65000],szukfraza="<ip_address>";
    size_t found;
    int i=0;
 
  get_page( "http://www.domaintools.com/research/my-ip/myip.xml",
            "daneIP.txt" ) ;
 
 
 
 
IPlog.open( "daneIP.txt");
 
            if( IPlog.good() == true )
            {
             cout << "Uzyskano dostep do pliku!" <<endl;
 
                 while(!IPlog.eof()) {                           
                    getline(IPlog,liniaIP);  
                   if(IPlog.good()) {cout<<liniaIP.length()<<endl;                   // w tym miejscu sypie się program, program zwraca 0  i wyskakuje "program przestał działać"
                   found = liniaIP.find(szukfraza);
                            if (found!=0) {               
                                       myIP[i]=liniaIP.substr(found+szukfraza.length(),liniaIP.length()- ((2*szukfraza.length())+1)); //+1 bo końcowy znacznik to </ip_adress>
                                       cout<<myIP[i]<<endl;
                                         }
 
                       i++;                    
 
                                    }
 
             IPlog.close();}
 
             } 
 
 
              else cout << "Brak Dostępu do pliku!" <<endl;
            system("pause");
}
</code
DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Temat zamknięty. poradziłem sobie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.