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