Classe d'ouverture et d'ecriture de fichier en mode binaire et texte sous vc++

Soyez le premier à donner votre avis sur cette source.

Vue 4 871 fois - Téléchargée 182 fois

Description

Classe qui peut s'averer très utile pour ceux qui ne comprennent pas comment on fait pour ouvrir/ecrire un fichier en mode texte/binaire. Créé sous VC++ 6.0. Seul petit bug : La fonction permettant de récuperer le contenu d'un fichier en mode texte qui bugge ! Mais si quelqu'un connait un moyen d'y arriver, qu'il n'hesite pas à me le dire a mon adresse
e-mail : goofy.jp@wanadoo.fr

Source / Exemple :


// ESfile -> Fichiers d'entrée/sortie du C++
// En têtes necessaires
#include <iostream>
#include <fstream>

// Les using. J'aurais pu mettre using namespace std mais pour eviter les erreurs ...
using std::cout;
using std::cin;
using std::ofstream;
using std::ifstream;
using std::endl;
using std::ios;

// Instances
ofstream outfile;
ifstream infile;

class ESFILE
{
public:
	//Constructeurs et Destructeurs
	ESFILE() {} ;
	~ESFILE() {} ;
	
	// Methodes
	ASE_open(char * name_file, bool mode);
	ASE_print(char * chaine, bool end);

	ASS_open(char * name_file);
	char * ASS_get();

	ABE_open(char * name_file);
	ABE_write(char *chaine, int longueur);

	ABS_open(char * name_file);
	ABS_get(char * entry, int position);

	AE_close();
	AS_close();

	bool file_is_opened() {return IS_OPENED;} ;

private:
	bool IS_OPENED;
};

ESFILE::ASE_open(char * name_file, bool mode)
{
	if (mode == false)
		outfile.open(name_file,ios::app);
	else
		outfile.open(name_file,ios::trunc);
	IS_OPENED = true;
};

ESFILE::ASE_print(char *chaine, bool end)
{
	if (end == true)
		outfile << chaine << endl ;
	else
		outfile << chaine ;
};

ESFILE::ASS_open(char *name_file)
{
	infile.open(name_file);
	IS_OPENED = true ;
};

char * ESFILE::ASS_get()
{
	char ch;
	int t;
	char * contenu ;

	while (infile.get(ch))
	{
		contenu[t] = ch ;
		t++;
	};

	return contenu ;
};

ESFILE::AE_close()
{
	outfile.close();
	IS_OPENED = false;
};

ESFILE::AS_close()
{
	infile.close();
	IS_OPENED = false;
};

ESFILE::ABE_open(char *name_file)
{
	outfile.open(name_file,ios::binary);
	IS_OPENED = true ;
};

ESFILE::ABE_write(char *chaine, int position)
{
	outfile.write(chaine, position);
};

ESFILE::ABS_open(char *name_file)
{
	infile.open(name_file,ios::binary);
	IS_OPENED = true ;
};

ESFILE::ABS_get(char * entry, int position)
{
	infile.read(entry,position);
};

/* EXPLICATIONS
A signifie Acces

B signifie Binaire(Direct)
S signifie Sequentiel

S signifie Sortie(lecture)
E signifie Entrée(Ecriture)

name_file : Nom du fichier à ouvrir
mode : false pour le mode Ajout (ecrire a la fin du fichier) et true pour remplacer le fichier
	   s'il existe
end : true pour placer un retour chariot (\n) a la fin ou false pour continuer sur la même ligne
chaine : chaine ou Caractère à ecrire
position : Position à lire
longueur : Longueur de la chaine à ecrire
entry : Caractere cible où placer le resultat

La fonction file_is_opened retourne true si un fichier est ouvert ou false dans le cas contraire

! ATTENTION !
- Ne pas ouvrir plusieurs fichiers a la fois
- Ne pas fermer un fichier si aucun n'est ouvert
- Ne pas ecrire ou lire une valeur si aucun fichier n'a été ouvert
- Arreter de se prendre pour un Programmer Master parcequ'on a trouvé une SuperClasse ... */

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
pk désolé????
Le seul problème c'est que tu as réinventé la roue, mais parfois c'est amusant de le faire :)
Messages postés
26
Date d'inscription
samedi 30 novembre 2002
Statut
Membre
Dernière intervention
31 janvier 2003

Désolé, mais j'ai fait mon possible. Maintenant, c'est à ceux qui le veulent de m'envoyer une amélioration à : goofy.jp@wanadoo.fr. Désolé, Désolé ...
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
Il y a quand même beaucoup de contrainte dans ta classes.
Ta var IS_OPENED doit-être true si et seulement si le fichier est bien ouvert. Ainsi avant de lire ou d'écrire tu met un if ( open = true ) et tout ce passera bien. Aussi tu ne vérifies pas si on écrit en dehors du fichier. genre position négative ou trop grande.

Voilà j'espère t'avoir aider pour améliorer ta classe.
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
Tu nous as pas réinventé la roue, lol c'est terrible, je faisais la même chose en VGA :)
Tu devrais proposer plus de mode d'ouverteur. Exemple créer une variable de type enum comprennant tous les modes car il y en a pas mal.
Ce serait cool que t'as fonction retourne un bool afin d'informer que l'ouverture c'est bien passée. Je m'explique: Dans ton cas un fichier peut-être mal ouvert et ta classe ne le remarquera pas, si le fichier spécifier n'existe pas ( mode lecture).
Pourquoi les deux pointeur de fichiers ne sont pas dans ta classe. Ça permetterait d'ouvrir plusieurs fichier en même temps.
Sinon t'as fonction get est beaucoup trop compliqué. Tu devrais faire une fonction get qui renvoi simplement un octect et une autre fonction get qui appel plusieurs fois la get simple.
Messages postés
26
Date d'inscription
samedi 30 novembre 2002
Statut
Membre
Dernière intervention
31 janvier 2003

Arghh, j'ai oublié de dire que je l'ai fait pour tourner sous Console Win32 pour VC++ ou Easywin pour Borland. Pour windows, je sais pas ce que ça va donner parceque je vais me mettre sous windows mais j'y suis pas encore !

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.