Class pour lire un fichier (vc++ 5.0)

Contenu du snippet

c'est juste une Class qui permet de lire et editer un fichier trés simplement.
elle est pas tout a fait fini, j'y travail encore et je compte la remettre a jour de temp en temp

Source / Exemple :


// LE FICHIER lectfich.h :

#include <windows.h>
#pragma once

struct ZoneMemoire{
	DWORD Taille;
	char* Contenu;
};

class Fichier_Class{
	private:
		// Variables
		char	*Nom;
		char	*Contenu;
		DWORD	Taille;
		DWORD	Ouvert;
		
	public:
		// Variables
		
		// Constructeur
				Fichier_Class(char *Nom_du_fichier);
				~Fichier_Class();
		// Operateur
		Fichier_Class& operator=(const Fichier_Class&);
		Fichier_Class& operator=(ZoneMemoire);
						
		// Fonctions
		bool	Mettre_a_jour();

		bool	GetNom(char*,DWORD);
		bool	GetContenu(char*,DWORD);
		DWORD	GetTaille();
		
		bool	SetContenu(char*,DWORD);
		bool	AddContenu(char*,DWORD);
		
		bool	EstOuvert();
		bool	Vider();
};
//typedef Fichier_Class LPFICHIER, FICHIER;

// Le Fichier : lectfich.cpp

#include "lectfich.h"

Fichier_Class::Fichier_Class(char *Nom_du_fichier){
	DWORD	dwLu;
	HANDLE	hFich;
	Nom=NULL;
	Contenu=NULL;
	Taille=NULL;
	Ouvert = false;
	if(Nom_du_fichier==NULL) return;
	
	Nom = (char *) LocalAlloc(LPTR,strlen(Nom_du_fichier)+1);
	strcpy(Nom,Nom_du_fichier);
	hFich = CreateFile(Nom,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
	if(hFich==INVALID_HANDLE_VALUE) return;
	Ouvert = true;
	if(GetLastError()==0){
		CloseHandle(hFich);
		return;
	}
	Taille = SetFilePointer(hFich, 0, NULL, FILE_END);
	SetFilePointer(hFich,0, NULL, FILE_BEGIN);
	Contenu = (char *) LocalAlloc(LPTR,Taille);
	ReadFile(hFich, Contenu, Taille, &dwLu, 0);
	CloseHandle(hFich);
}

Fichier_Class::~Fichier_Class(){
	Mettre_a_jour();
	Ouvert = false;
	if(Nom) LocalFree(Nom);
	if(Contenu) LocalFree(Contenu);
	return;
}

bool Fichier_Class::Mettre_a_jour(){
	HANDLE	hFich;
	DWORD	dwEcrit;
	if(!Ouvert) return false;
	hFich = CreateFile(Nom,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
	if(Contenu) WriteFile(hFich,(char *)Contenu,Taille,&dwEcrit,0);
	CloseHandle(hFich);
	return true;
}

bool Fichier_Class::GetNom(char* pNom,DWORD Taille_pNom){
	if(!Ouvert) return false;
	if(Taille_pNom>strlen(Nom)){
		strcpy(pNom,Nom);
		return true;
	}
	return false;
}

bool Fichier_Class::GetContenu(char* pContenu,DWORD Taille_pContenu){
	if((!Ouvert)||(Taille==NULL)||(!pContenu)) return false;
	if(Taille_pContenu<Taille) return false;
	memcpy(pContenu,Contenu,Taille);
	return true;
}

DWORD Fichier_Class::GetTaille(){
	if(!Ouvert) return 0;
	return Taille;
}

bool Fichier_Class::SetContenu(char* pContenu,DWORD Taille_pContenu){
	if(!Ouvert) return false;
	Taille = Taille_pContenu;
	if(Contenu) LocalFree(Contenu);
	Contenu = (char*) LocalAlloc(LPTR,Taille);
	if(!Contenu){
		Taille = NULL;
		return false;
	}
	memcpy(Contenu,pContenu,Taille);
	return true;
}

bool Fichier_Class::AddContenu(char* pContenu,DWORD Taille_pContenu){
	char* Tmp;
	if(!Ouvert) return false;
	if(!Contenu) SetContenu(pContenu,Taille_pContenu);
	Tmp = (char*) LocalAlloc(LPTR,Taille+Taille_pContenu);
	if(!Tmp) return false;
	memcpy(Tmp,Contenu,Taille);
	memcpy(&Tmp[Taille],pContenu,Taille_pContenu);
	Taille += Taille_pContenu;
	LocalFree(Contenu);
	Contenu = Tmp;
	return true;
}

bool Fichier_Class::EstOuvert(){
	if(!Ouvert) return false;
	return true;
}
bool Fichier_Class::Vider(){
	if(!Ouvert) return false;
	if(Contenu) LocalFree(Contenu);
	Taille = NULL;
	return true;
}

Fichier_Class& Fichier_Class::operator=(const Fichier_Class& Fich){
	if(this == &Fich) return *this;
	if(!Fich.Ouvert) return *this;
	SetContenu(Fich.Contenu,Fich.Taille);
	return *this;
}

Fichier_Class& Fichier_Class::operator=(ZoneMemoire ZM){
	SetContenu(ZM.Contenu,ZM.Taille);
	return *this;
};

Conclusion :


je pense que je vais rajouter des fonction pour pouvoir renommer, deplacer, copier le fichier.
et d'autre fonction comme le cryptage de fichier etc...

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.