Class pour lire un fichier (vc++ 5.0)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 962 fois - Téléchargée 38 fois

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

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
3 mars 2004

Ce travail est intéressant. Faudrai aussi pensez à une fonction qui retourne les permissions du fichier. (même si c'est un pdf); M'avertir de la suite.
Messages postés
95
Date d'inscription
mercredi 5 décembre 2001
Statut
Membre
Dernière intervention
27 juin 2006

la source que j'ai mis ici est en fait composé de 2 sources
le debut c'est le fichier lectfich.h
et aprés c le fichier lectfich.cpp
Messages postés
24
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
23 août 2005

hummmmmmm ou peut-on trouver le header :


lectfich.h

svp merci
Messages postés
95
Date d'inscription
mercredi 5 décembre 2001
Statut
Membre
Dernière intervention
27 juin 2006

ouai, c bon le probleme est corrigé
Messages postés
1
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
30 janvier 2003

salut :) as tu mis à jour ton code depuis ??

merci :))
Afficher les 7 commentaires

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.