begin process at 2008 07 19 09:07:08
1 212 728 membres
67 nouveaux aujourd'hui
14 165 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SAUVEGARDER ET CHARGER AVEC CFILE


Information sur la source

Catégorie :Fichiers / Disque Niveau : Initié Date de création : 06/03/2003 Date de mise à jour : 06/03/2003 10:50:01 Vu : 7 688

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

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

  • 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
  • }
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
  • signaler à un administrateur
    Commentaire de schn le 24/04/2006 09:16:23

    Bonjour,

    Merci pour cette source qui tourne du premier coup sans aucun problème !

    merci

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS