[stl] connaitre la taille d'un fichier et copier dans un string

Contenu du snippet

2 méthodes pour copier le contenu d'un fichier dans un string.
1 méthode directe pour connaitre la taille d'un fichier.

Savoir la taille d'un fichier: il suffit d'utiliser seekg et de placer le pointeur en fin de fichier (avec l'aide de ios::end), puis d'utiliser tellg qui renvoie l'offset depuis le début de fichier jusqu'à la position courante. Penser à remettre le pointeur en début de fichier. On peut aussi sauvegarder la position courante, calculer la taille de fichier restante, puis remettre le pointeur dans l'ancienne position.

Pour la copie du contenu dans un string, on crée un buffer (char*) de taille du fichier, on utilise read, et la méthode assign des string. C'est assdez bourrin. Une autre méthode (la une) utilise assign avec en premier paramètre un iterateur du fichier de type char (les éléments référencés par l'iterateur sont des char) et en second paramètre un iterateur de char vide (correspondant à une fin de lecture). L'inconvénient est que cela reproduit le systèùme suivant:
while (fichier >> toto) // char toto
res.pushback(toto);
donc les caractères séparateurs seront ignorés.

Source / Exemple :


int main (int argc, char**	argv)
{
	ifstream fichier("buf.txt",ios::binary);
	string res;

//	METHODE 1:
//	res.assign(istream_iterator<char>(fichier), istream_iterator<char>() );
	
//	METHODE 2:
	int size;	char *buffer;

	// taille du fichier
	fichier.seekg(0,ios_base::end);
	size= fichier.tellg();
	fichier.seekg(0,ios_base::beg);

	// copie dans string
	buffer= new char[size];
	fichier.read(buffer,size);
	res.assign(buffer,size);

	cout << "size= " << size << endl << "res------------\n" << res << "res------------" << endl;

	getch();
}

Conclusion :


Ca peut paraitre compliqué qd on connait pas la STL, mais cette bibliothèque pense vraiment à tout. Toutefois, si vous avez des prob sur ce mini-source, demandez moi.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.