Comment recuperer tous le contenu d'un fichier (avec saut de ligne et en c++) ?

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 27 sept. 2006 à 14:52
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 10 sept. 2013 à 14:12
Bonjour,

Je cherche à savoir comment il faut faire pour prendre tous le contenu d'un fichier (texte) possedant des retours à la ligne!

J'ai l'hbitude de fare :

#include
#include <fstream>
#include <string>

[...]
ifstream file("file.type");
string texte;
getline(file,texte);
[...]

Mais "texte" à la valeur de la premiere ligne du fichier ("file.type") et non du fichier complet!

Comment faire pour que "texte" ait la valeur du fichier complet et pas seulement celle de la première ligne?
Pouvez-vous m'aidez?

Je vous remercie d'avance pour votre future réponse!

Nico

5 réponses

Dans l'appel à la fonction getline, indique le séparateur de fin de ligne comme étant le symbole fin de fichier (end_of_line).
De ton écriture :
> getline( file, texte );
cela devient :
> getline( file, texte, char_taits::eof() );

Ca marche parce que tu travailles avec un fichier texte.
Dans l'implémentation Microsoft, char_taits::eof() vaut tout simplement -1.
1
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 sept. 2006 à 15:09
Voici ce que tu peux faire:

bool RetrieveDataFromFile(char * FileName)
{
  std::ifstream Input;
  unsigned long FileSize;

  // Open the specified file
  Input.open(FileName,std::ios::binary);
  if(Input==NULL)
    return false;

  // Get file size
  Input.seekg(0,std::ios_base::end);
  FileSize=Input.tellg();
  Input.seekg(0,std::ios_base::beg);

  // Allocate some space
  if(m_Data)
  {
    delete [] m_Data;
    m_Data=NULL;
  }

  m_Data=new unsigned char[FileSize];
  if(m_Data==NULL)
  {
    Input.close();
    return false;
  }

  // Read the file into memory
  Input.read((char*)m_Data,FileSize);

  // End
  Input.close();
  return true;
}

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 sept. 2006 à 15:11
Oups...
J'ai oublié de dire que, dans mon exemple, m_Data est un tableau d'unsigned char.
Mais je pense que tu l'avais compris...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
28 sept. 2006 à 18:02
En fait, je ne sais pas trop quelle manière est la mieux en terme de performance:
- soit calculer la taille du fichier, allouer un buffer en conséquence et tout lire dedans (2 parcours de fichier)
- soit lire un par par les caractères du fichier jusqu'au caractère de fin (beaucoup d'accès au fichier)
- soit allouer un buffer de taille fixe BUFFER_SIZE, de lire BUFFER_SIZE caractères et de boucler si la taille du fichier est supérieure à BUFFER_SIZE

Si quelqu'un a une opinion là-dessus...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
10 sept. 2013 à 14:12
Ouh le déterrement de vieux topic qui me donnent des cheveux blancs...
Merci de faire attention à la date avant de répondre :)
0
Rejoignez-nous