begin process at 2012 05 29 02:03:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

[C++, flux et fichier]Charger un fichier dans un vector<char>


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C++, flux et fichier]Charger un fichier dans un vector<char>

dimanche 30 octobre 2011 à 23:48:21 | [C++, flux et fichier]Charger un fichier dans un vector<char>

PhilipMorris

Bonjour à tous!

Débutant en c++, je cherche à charger les octets d'un fichier dans un " vector <char> tableau ", de la taille du fichier donc. Je ne sais pas si c'est possible, en tout cas j'ai des erreurs dans mon code :
Code C/C++ :
 std::ifstream fichier("example.xyz", std::ios::binary);
  if (!fichier.is_open())
  {
    std::cerr << " Oups !" << std::endl;
  }
  else
  {
      fichier.seekg(0, std::ios_base::end);
      int taille = fichier.tellg();
      fichier.seekg(0, std::ios_base::beg);
  std::vector < char > tableau(taille);
  fichier.read(tableau, taille);
  fichier.close();
  }


Le problème vient de :
Code C/C++ :
fichier.read(tableau, taille);


Avec comme message d'erreur :

error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::read(std::vector<char, std::allocator<char> >&, int&)'|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\istream|464|note: candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]|




Bref, je ne sais pas comment mettre un fichier dans un vector !
Puisse un maître me corriger
lundi 31 octobre 2011 à 04:40:27 | Re : [C++, flux et fichier]Charger un fichier dans un vector<char>

Lucky92

Réponse acceptée !
Salut,

Voici ce que je ferais :

Code C/C++ :
std::ifstream fichier("example.xyz", std::ios::binary);
if (!fichier)
{
	std::cerr << " Oups !" << std::endl;
}
else
{
	std::vector < char > tableau;
	std::copy( std::istream_iterator< char >( fichier ) ,
		   std::istream_iterator< char >() , 
		   std::back_insert_iterator< std::vector < char > >( tableau ) ) ;
        //...
}


C'est un grand classique d'utilisation de la STL : algoritme de copie, itérateur sur flux d'entrée et itérateur d'insertion.

Enjoy.

lundi 31 octobre 2011 à 13:41:30 | Re : [C++, flux et fichier]Charger un fichier dans un vector<char>

PhilipMorris

Merci !

Je viens de le tester et ça met énormément plus de temps à charger le fichier dans le vector que de charger dans un :
Code C/C++ :
char* tableau = new char[nbOctet];



Il n'y a pas moyen de passer outre la fonction de copie pour charger un flux dans un vector? Parce que plus le fichier est grand, plus ça prend un temps fou!
mardi 1 novembre 2011 à 12:07:12 | Re : [C++, flux et fichier]Charger un fichier dans un vector<char>

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Si c'est un flux, alors j'utiliserais plutôt un std::string plutôt qu'un std::vector.
Le back_inserter est élégant, mais peu adapté à un flux de caractère. J'utilise généralement ceci:
Code C/C++ :
bool fileToString(const std::string& filename, std::string& text)
{
  std::ifstream fichier(filename.c_str(), std::ios::binary);
  if (!fichier)
    return false;

  fichier.seekg(0, std::ios_base::end);
  const int nbOctet = fichier.tellg();
  fichier.seekg(0, std::ios_base::beg);

  char* tableau = new char[nbOctet + 1];
  fichier.read(tableau, nbOctet);
  fichier.close();
  tableau[nbOctet] = 0;
  text.assign(tableau, nbOctet);
  delete[] tableau;

  return true;
}



________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mardi 1 novembre 2011 à 14:23:39 | Re : [C++, flux et fichier]Charger un fichier dans un vector<char>

PhilipMorris

Merci, c'est bien ce que je pensais! Résolu!


Cette discussion est classée dans : fichier, code, tableau, vector, std


Répondre à ce message

Sujets en rapport avec ce message

tableau [ par ToToL ] Bonjour,j'ai un tableau créé de cette maniere :std::vector Pos;et a un moment j'ai besion d'en créé un autre qui doit etre une copie de Pos , quel es code en c++ [ par Sgh_Khaoula ] Svp est ce que quelqun'un peut m'aider à coprendre la ligne "Triangles = new std::vector[ Depth ];"MultiMesh::MultiMesh( int depth ) { Depth = depth;  récupération d'un fichier dans un tableau [ par dgac ] Bonjour j'ai essayé le code suivant[CODE] #include&lt Tri des membres d'une classe (std::vector ou std::list) [ par WolfSpirit2a ] Salut à tous ! je suis actuellement en train de programmer un petit jeu sans prétentions en C++/SDLMalheureusement je suis confronté à un problème sur écriture classe dans un fichier texte [ par nord666 ] Salut tout le monde!J'ai besoin d'aide pour l'écriture dans un fichier. Je voudrais que l'extension du fichier soit .city. Ce que je veux écrire dans WinExec et temps d'exécution d'une commande dos [ par maxidoh ] Bonsoir,je fais un programme sous Borland C++ Builder qui va lancer des requêtes ping et traceroute sous windows.Je lance l'exécution des ping et trac ecriture dans fichier C [ par green mamba ] Bonjour à tous!voilà, j'ai refait un code de tri (je me suis légèrement inspiré d'un cs présent ici, je code plutôt mal en général), et je voudrais ré Code C++ pour exécutable ouverture fichier pdf [ par nickelchrom ] Bonjour,<img src="http://www.codes-sources.com/imgs2/smile_blush.gif" / programmation SE en c [ par tfcv123 ] slt,j'ai un pbm avec un exercice en C sous linux. je dois réaliser un programme ki initialise un ensemble de taile fixe de threads. un tableau sert de Probleme d'heritage [ par bakibak ] Bonjour a tous, je suis en train de coder un projet pour la gestion d'un zoo a la fac.Sans tout vous décrire j'ai une classe personne et deux classe h


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales