Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE D'OUVERTURE ET D'ECRITURE DE FICHIER EN MODE BINAIRE ET TEXTE SOUS VC++


Information sur la source

Catégorie :Divers Niveau : Débutant Date de création : 01/12/2002 Date de mise à jour : 01/12/2002 01:20:20 Vu / téléchargé: 3 140 / 132

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

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

  • // 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 ... */
// 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 ... */

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de dominiquox le 01/12/2002 01:49:32

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 !

signaler à un administrateur
Commentaire de trinitacs le 01/12/2002 15:30:27

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.

signaler à un administrateur
Commentaire de trinitacs le 01/12/2002 15:39:39

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.

signaler à un administrateur
Commentaire de dominiquox le 04/12/2002 13:38:00

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é ...

signaler à un administrateur
Commentaire de trinitacs le 04/12/2002 15:45:31

pk désolé????
Le seul problème c'est que tu as réinventé la roue, mais parfois c'est amusant de le faire :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.