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

Signaler
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
-
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2020
-
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.
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2020
93
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
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2020
93
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
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2020
93
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
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 novembre 2020
93
Ouh le déterrement de vieux topic qui me donnent des cheveux blancs...
Merci de faire attention à la date avant de répondre :)