Fonction pour sauvegarder et charger du texte dans un fichier.
La sauvegarde à 2 modes:
-Mode ajouter qui ajoute à la fin du fichier
-Mode remplacer qui remplace le texte existant
La fonction charger permet de charger des fichiers de plusieurs Megs.
Il y a une boucle qui utilise x fois le buffer de la manière suivante:x=(la taille du fichier)/(par la taille du buffer)
Source / Exemple :
int CTotoDlg::Sauvegarder(CString file,CString data,CString mode)
{
//////////////////////////////////////////////////////////////////////////////////////
//Mode Ajouter mode="Ajouter"
//Ajoute à la fin du fichier(par defaut)
//
//Mode Remplacer mode="Remplacer"
// Remplace le fichier
//////////////////////////////////////////////////////////////////////////////////////
CFile fichier;
int Verif;
int OK=0;
//On definit les tab et Enter en format texte
CString Enter;
CString Tab;
Enter.FormatMessage("\n");
Tab.FormatMessage("\t");
//////////////Mode Ajouter////////////////
if (mode == "Ajouter")
{
CString st;
st=Charger(file);
st=st.Right(1);
if(st!='\n')
{
data=Enter+data;
//on ajoute un entrée (\n) à la fin du fichier s'il n'y en à pas
}
Verif=fichier.Open(file,CFile::modeWrite);
//Ouverture du fichier en lecture/écriture
if(Verif != 0)
{
fichier.SeekToEnd(); //aller à la fin du fichier
fichier.Write(data,data.GetLength()); // sauvegarde dans le fichier
fichier.Close(); // fermeture du fichier
OK=1;
}
}
//////////////Mode Remplacer////////////////
if (mode == "Remplacer")
{
Verif=fichier.Open(file,CFile::modeCreate |CFile::modeWrite);
//Ouverture du fichier en lecture/écriture et le créer s'il n'existe pas
if(Verif != 0)
{
fichier.Write(data,data.GetLength()); // sauvegarde de la log dans un fichier
fichier.Close(); // fermeture du fichier
OK=1;
}
}
return OK; //OK=1 si pas de pb OK=0 si pb
}
//////////////////////////////////////////////////////////////////////////////////////
//En fonction du nom du fichier on le charge et on le retourne dans un
//CString st
CString CTotoDlg::Charger(CString file)
{
CFile fichier;
char Buffer[100000];
int Taille=100000;
CString st="";
int Buff;
int Verif=fichier.Open(file,CFile::modeRead);//Ouverture du fichier en lecture
if(Verif != 0)
{
Buff=int(fichier.GetLength());
//On recupere la taille du fichier en octets
do
{
if(Buff>Taille)
//si la taille du fichier est encore > au buffer
{
fichier.Read(Buffer,Taille);
//on en prend que 100000
CString tmp=Buffer;
st=st+tmp.Mid(0,Taille);
//on copie les 100000 dans le cstring
Buff=Buff-Taille; //on remet le nombre d'octet à charger
}else
{
fichier.Read(Buffer,Buff);
//si le buffer suffit on le lit
CString tmp=Buffer;
st=st+tmp.Mid(0,Buff); //on copie le reste dans le cstring
break;
//on casse la boucle quand on a tout lu
}
}while(true);
//boucle infinie tant que le fichier n'est pas chargé entiérement
fichier.Close(); // fermeture du fichier
}else
{
st="NULL"; //Si problème retourne NULL
}
return st; // retourne le texte dans un CString
}
Conclusion :
Aide pour ceux qui ont du mal(les autres: désolé pour la trivialité des infos)
Vous pouvez ajouter dans votre projets directement le code
/!\ Il faut renommer CTotoDlg par le nom de votre projet
Ensuite
Il faut ajouter dans votre .h (ex: totoDlg.h) dans la partie (public:):
afx_msg int Sauvegarder(CString file,CString data,CString mode);
afx_msg CString Charger(CString file);
Et maintenant l'utilisation:
exemple d'appel des fonctions
CString texte=Charger("toto.txt");
//texte contient le texte qui était dans toto.txt
CString data="dfhsldfh...dfsf" ou une variable de type CString d'une edit box ou autre ...
Sauvegarder("toto.txt",data,"Ajouter")
// Ca ajoute dfhsldfh...dfsf à la fin du fichier toto
//On peut controler si la fonction a fonctionné avec un int
int ETAT=Sauvegarder("toto.txt",data,"Ajouter")
//si ETAT=1 pas de pb si ETAT=0 il y a eu un problème
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.