Oppure

Loading
03/05/11 20:06
crybot
salve, ancora...

ho, stavolta, un problema che non riesco a risolvere, una mia applicazione ha bisogno di leggere una stringa da un file di testo, contenente spazi. prima usavo le funzioni del C come fopen() e fgets(), ma adesso ho deciso di passare a funzioni piu` efficenti come le funzioni di fstream. quando arrivo pero` ad utilizzare getline in questo modo:

char Window[100];
fstream in("mio file.txt", ios::in);

in.getline(Window, 100);

la variabile Window risulta sempre vuota... questo perche`? grazie ;)
aaa
03/05/11 21:18
HeDo
controlla se il file è stato correttamente aperto:


if (!in)
    cout << "Errore apertura file" << endl;



aaa
03/05/11 21:47
crybot
si... avevo gia` provato, ho diversi manuali di c++, uno trall'altro recentissimo uscito ad aprile, tutti pero` usano getline nel modo in cui l'ho descritto prima. non riesco a capire perche` non funzioni... in oltre non posso usare il tipo string perche` devo passare la variabile char alla funzione FindWindow() per trovare l'handle della finestra dato il titolo, e necessita di un parametro char. domani posto tutto il codice, cosi` vediamo se sono io che sbaglio qualcosa...
aaa
04/05/11 20:05
crybot
ok, la mia necessita` e questa:
utilizzare le funzioni di fstream per leggere una stringa (anche del tipo string, convertendola poi in char con c_str() ) da un file, ma con lo stream cin da file registro soltanto la stringa fino al carattere di spaziatura, ma ho bisogno di leggere il nome di una finestra, quindi... con fopen ero piu` semplice utilizzavo fgets ed era ok, ma cosi` non so proprio come rigirarmi e su google dopo due giorni di ricerca non ho trovato niente, tanto meno su tutti e 7 i libri di c++ che ho in casa...


il codice che uso attualmente e` questo:

void FinestraCheck()
	{
                char Window[100];
                fstream in;
		in.open("finestra.txt", ios::in);
		if (!in)
		{

			cerr << "\n\nerrore!!" << endl;
			system("pause");
		}

		in >> Window; // legge soltato fino al carattere di spaziatura
         /* ho bisogno che legga un'intera stringa di parole */

       /* questa e` una prova per vedere se la stringa ha letto dal file */
	  cout << endl << endl << Window << endl;
		system("pause");
/* questa e` una prova per vedere se la stringa ha letto dal file */


		HwndWindow=FindWindow(NULL, Window); // trova handle finestra
		if (HwndWindow == NULL)
		{
			MessageBox(NULL, " \n Finestra non trovata.", "Crybot ",MB_ICONERROR | MB_TOPMOST);
			WindowCalibration();
		}
		else
		{
			MessageBox(NULL, " \n Finestra trovata!", "Crybot ",MB_ICONINFORMATION | MB_TOPMOST);
		}
	}



se qualcuno sa aiutarmi, lo prego di farlo, altrimenti devo tornare a fopen e fgets ;)

Crybot
Ultima modifica effettuata da crybot 04/05/11 20:07
aaa
09/05/11 21:34
frank87
Io di solito faccio cosi:
#include <cstdlib>
#include <iostream>
#include<fstream>
using namespace std;

int main(int argc, char *argv[])
{
       string parola;
       fstream file;

      file.open("nomefile", ios::in);
  
      if(file.fail())
       {
        cerr << "Errore nell'apertura dei file" << endl;
        system("PAUSE");
        return -1;
       }
  
      while(!file.eof())
      {
      
      file>> parola;

      }

  file.close();
 

    system("PAUSE");
    return EXIT_SUCCESS;
}
Ultima modifica effettuata da frank87 09/05/11 21:36
aaa
10/05/11 12:34
crybot
ho risolto utilizzando getline, prima mi dava errore, ma adesso non so perche` funziona nuovamente... in ogni caso la tua soluzione non puo` funzionare, io devo leggere diverse linee di testo ognuna contenente spazi, tu riesci a leggere tutto parola per parola ma non puoi sapere quando finisce una linea di testo...
grazie mq ;)
aaa