Ouvrir un fichier dans son intégralité en C++

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 14 avril 2007 à 23:02
JejeLand Messages postés 111 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 5 août 2011 - 16 avril 2007 à 11:13
Bonjour,

J'ai déjà posé cette question, mais elle n'a été qu'à moitié satisfaite.
Je m'explique je suis en train de créer un programme qui necessite d'ouvrir tous types de fichiers : or avec la fonction actuelle que j'ai pour ouvrir les fichiers, le caractère ASCII 26 (SUB) n'est pas ouvert et stoppe complètement l'ouverture du fichier.

Ma fonction actuelle :

string ouvrir_fichier(string nom_fichier) {
 string phrase;
 ifstream fichier(nom_fichier.c_str());
 if (!fichier) {
  cout <<"Erreur, fichier corrompu ou inexistant !\n\n";
  phrase = "Erreur, fichier corrompu ou inexistant !";
 } else {
  stringstream buffer;
  buffer << fichier.rdbuf();
  fichier.close();
  phrase = buffer.str();
 }
 return phrase;
}

La dernière fois que j'avais posé ma question, la réponse ouvrait tous le fichier mais dés qu'il rencontrait le caractère SUB, il ajoutait des caractères.

Pour information, je souaiterai déposer ce programme sur cppfrance.com mais s'il n'ouvre pas tous les fichiers, il paraîtra inutile mais surtout non finis.

Programmation c++ console

Merci d'avance et à bientôt.

Nico

2 réponses

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
14 avril 2007 à 23:09
Bonjour,

Mon ancienne question :

http://www.cppfrance.com/infomsg_PROBLEME-AVEC-OUVERTURE-TOTALE-CERTAINS-FICHIERS_891898.aspx

La réponse que j'ai suivit mais qui ne fonctionnait pas parfaitement était (je l'ai bien sûr transformé en fonction afin de pouvoir l'utilisé dans mon programme) :

// read file data using associated buffer's members
#include
#include <fstream>
using namespace std;

int main () {
  filebuf *pbuf;
  ifstream filestr;
  long size;
  char * buffer;

  filestr.open ("test.txt");

  // get pointer to associated buffer object
  pbuf=filestr.rdbuf();

  // get file size using buffer's members
  size=pbuf->pubseekoff (0,ios::end,ios::in);
  pbuf->pubseekpos (0,ios::in);

  // allocate memory to contain file data
  buffer=new char[size];

  // get file data  
  pbuf->sgetn (buffer,size);

  filestr.close();

  // write content to stdout
  cout.write (buffer,size);

  return 0;
}

Si votre réponse fonctionne merci de me la faire savoir.

Merci d'avance pour vos réponses
A bientôt
Nico
0
JejeLand Messages postés 111 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 5 août 2011 1
16 avril 2007 à 11:13
Bonjour,


J'ai trouvé ce lien http://www.cplusplus.com/reference/iostream/ifstream/

Je pense que si tu utilise la fonction open en mode binary le caractere SUB ne sera plus pris en compte.

Dans ton cas filestr.open ("test.txt",ifstream::binary);
0
Rejoignez-nous