2010-07-25 17 views
1

Je voudrais ouvrir un fichier et en lire une ligne. Il n'y aura qu'une seule ligne dans le fichier, donc je n'ai pas vraiment besoin de me soucier de la boucle, bien que pour référence future, il serait bon de savoir lire plusieurs lignes.Comment ouvrir et lire un fichier en utilisant ifstream en C++?

int main(int argc, const char* argv[]) { 

    // argv[1] holds the file name from the command prompt 

    int number = 0; // number must be positive! 

    // create input file stream and open file 
    ifstream ifs; 
    ifs.open(argv[1]); 

    if (ifs == NULL) { 
     // Unable to open file 
     exit(1); 
    } else { 
     // file opened 
     // read file and get number 
     ...? 
     // done using file, close it 
     ifs.close(); 
    } 
} 

Comment est-ce que je ferais ceci? Aussi, suis-je en train de gérer le fichier ouvert correctement en termes d'ouverture réussie?

Merci.

+2

Avez-vous un livre C++? Si oui, avez-vous regardé dans son chapitre la bibliothèque d'E/S standard? Si ce n'est pas le cas, je vous recommande fortement d'obtenir l'un des livres d'introduction répertoriés dans [Le Guide du Livre C++ définitif et Liste] (http://stackoverflow.com/questions/388242/). –

+0

Je n'ai pas de livre C++. Je regardais http://www.cplusplus.com/reference/iostream/istream/getline/ et j'étais confus par le paramètre 'streamsize n'. – Hristo

+0

Si vous cliquez sur la page 'streamsize', il est dit:" Le type est un synonyme défini par l'implémentation de l'un des types entiers de base signés (généralement signé int ou signed long). " –

Répondre

5

Quelques choses:

  1. Vous pouvez lire un numéro avec l'opérateur d'extraction de flux >>: ifs >> number.

  2. La fonction de bibliothèque standard getline lit une ligne à partir d'un fichier, si vous voulez une ligne de texte complète.

  3. Pour vérifier si le fichier est ouvert, écrivez simplement if (ifs) ou if (!ifs). Laissez le == NULL.

  4. Vous n'avez pas besoin de fermer explicitement le fichier à la fin. Cela se produira automatiquement lorsque la variable ifs sera hors de portée.

Code révisé:

if (!ifs) { 
    // Unable to open file. 
} else if (ifs >> number) { 
    // Read the number. 
} else { 
    // Failed to read number. 
} 
+0

.. comment je gérerais les espaces? – Hristo

+0

Par défaut l'espace blanc est silencieusement abandonné par l'opérateur >> –

1

Pour ce que vous faites ici, simplement:

ifs >> number; 

extraira un numéro du flux et le stocker dans 'numéro'.

La mise en boucle dépend du contenu. Si c'était tous les chiffres, quelque chose comme:

int x = 0; 
while (ifs >> numbers[x] && x < MAX_NUMBERS) 
{ 
ifs >> number[x]; 
x++; 
} 

travaillerais pour stocker une série de chiffres dans un tableau. Cela fonctionne parce que l'effet secondaire de l'opérateur d'extraction est vrai si l'extraction réussit, ou faux s'il échoue (en raison d'erreurs de fin de fichier ou de disque, etc.)

+0

(Si quelqu'un a vu cela dans les 2 premières minutes, j'ai omis l'extraction réelle dans mon premier passage) – Iain

+2

Heheh, la prochaine fois juste ninja l'éditer et ne rien dire . C'est le chemin de débordement de pile. –

+0

@John ...hahaha: D – Hristo