Une classe pour gérer les fichiers en mode binaire

Description

// class FILEio
///////////////////

class FILEio
{
private:
fstream F;
long *Pos;

public:
FILEio(void);
FILEio(char *);
~FILEio(void);

int peek(void);
int get(void);
char convASCII(char);
void put(char);

void DEBUT(void);
void seekg(long pos);
void seekg(long,enum ios::seek_dir);
long tellg(void);
void FIN(void);

long Size(void);
long Find(long pos,char c);
};

FILEio::FILEio(void)
{
F.open("Defaut.txt",ios::in|ios::out|ios::binary);
};

FILEio::FILEio(char *file)
{
F.open(file,ios::in|ios::out|ios::binary);
};

FILEio::~FILEio(void)
{
F.close();
};

int FILEio::peek(void)
{
return F.peek();
};

int FILEio::get(void)
{
return((F.peek()!=EOF)?F.get():EOF);
};

char FILEio::convASCII(char chr)// cette fonction converti les
{ // caractéres accentué provenant de NOTEPAD.EXE, WORDPAD.EXE,
// ou WRITE.EXE en caractéres ASCII affichable à l'écran
int chrI=(int)chr;
switch(chrI)
{
case 'é':
chrI=0x82;
break;

case 'ê':
chrI=0x88;
break;

case 'è':
chrI=0x8A;
break;

case 'à':
chrI=0x85;
break;

case 'ô':
chrI=0x93;
break;

case 'ï':
chrI=0x8B;
break;

case '²':
chrI=0xFD;
break;

case 'ç':
chrI=0x87;
break;

case '°':
chrI=0xF8;
break;

case '..': // .. (shift+ '^') n'existe pas dans le code ASCII standard
chrI=0xFB;// Racine ,choix arbitraire du fait que
break; // ^ est généralement utiliser pour la puissance

case '£':
chrI=0x9C;
break;

case 'ù':
chrI=0x97;
break;

case 'µ':
chrI=0xE6;
break;

case '§':
chrI=0x15;
break;

default: break;
};

return (char)chrI;
};

void FILEio::put(char chr)
{
F.put(chr);
};

void FILEio::DEBUT(void)
{
F.seekg(0L);// se place au debut du fichier
};

void FILEio::seekg(long pos)
{
F.seekg(pos);// se place dans le fichier à la position pos
};

void FILEio::seekg(long off,enum ios::seek_dir ori)
{
F.seekg(off,ori);// se place dans le fichier à la position off
}; // par rapport à l'origine
// ( ios::beg , ios::cur , ios::end )

long FILEio::tellg(void)
{
return F.tellg();
};

void FILEio::FIN(void)
{
F.seekg(0L,ios::end);// se place à la fin du fichier
};

long FILEio::Size(void)
{
long pos=F.tellg(); // sauve la position courante
F.seekg(0L,ios::end);// se place à la fin du fichier
long size=F.tellg(); // sauve la position du curseur ( fin du fichier )
F.seekg(pos);// se remet à la position courante
return size; // renvoi la taille du fichier en octets
};

// cherche un caractére dans le fichier
// et renvoi le premier trouvé ( ou -1 si non trouvé )
long FILEio::Find(long pos,char c)
{
char chr;
long pos_old=F.tellg(),posi=-1;
F.seekg(pos);// recherche à partir de pos

while(F.peek()!=EOF)
{
chr=F.get();
// cherche le premier caractére c dans le fichier
if(chr==c)
{
posi=F.tellg()-1;// sauve la position du caractére
F.seekg(pos_old);// remet le curseur à sa position de départ
return posi;// renvoi la position du caractere
}
}
F.seekg(pos_old);// remet le curseur à sa position de départ
return posi;// renvoi la position du caractere
}; // revoi -1 si non trouvé

Codes Sources

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.