Récupérer le contenu d'un buffer dans un fichier

bika12 1 Messages postés dimanche 8 mai 2016Date d'inscription 18 juin 2017 Dernière intervention - 18 juin 2017 à 13:47 - Dernière réponse : mamiemando 28092 Messages postés jeudi 12 mai 2005Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention
- 18 août 2017 à 10:34
Bonjour,

j'ai réalisé ce code pour recevoir un fichier A.txt de la par d'un client qui contient une seule ligne, l'enregistrer , puis récupérer la 1ere valeur de cette ligne ,puis je compare cette valeur au autres valeurs (des 1ers entier de chaque lignes d'un fichier B.txt déjà crée chez le serveur) de fichier B, si cette valeur n'existe pas dans ce dernier toute la ligne de fichier A sera copier dans B (a la fin de fichier) sinon on ne retourne rien ! !

là j'ai pu récupérer le contenu de fichier A, j'ai pu faire la comparaison entre les éléments des 2 fichiers mais le problème c'est que je n'ai pas pu copier le contenu de A dans B je sais pas elle est ou exactement l'erreur !lorsque je compile tout va bien mais lorsque j'ouvre le fichier B je ne trouve pas la ligne ajoutée !!!

le code :

oid TraitementRcv ( int connfd)
{
	char buffer[256];

	int n = 0;
	char revbuf[LENGTH];
	fgets(buffer,255,stdin);

	int fr_block_sz = 0;

	n = read(connfd, buffer, 255);
	if (n < 0) cout << "Erreur de lecture de  socket";

	fstream fr ("basecloud.txt",ios::in|ios::out|ios::app);
	ofstream inte("intermediaireCloud.txt",ios::out|ios::trunc);
	if (!inte)
		cerr << "Impossible d'ouvrir le fichier !" << endl;

	bzero(revbuf, LENGTH); 

	while((fr_block_sz = recv(connfd, revbuf, LENGTH, 0)) > 0) 
	{
		revbuf[sizeof(revbuf)]='\0';
		inte.write(revbuf,sizeof(revbuf));

		if (fr_block_sz == 0 || fr_block_sz != 512) 
		{
			break;
		}
	}     
	cout<<"fichier reçu \n ";

	inte.close(); 
	ifstream inter("intermediaireCloud.txt");
	if (!fr && !inter)
		cerr << "Impossible d'ouvrir les fichiers !" << endl;

	string IDnvcl, IDcl, infC, INF;

	int c = 0;
	while(inter)
	{
		getline(inter,IDnvcl);
		c++;
		istringstream is(IDnvcl);
		if (c==1)
		{
			is >> IDcl;
			break;
		}
	}
	cout << IDcl << "\n"<< IDnvcl<<"\n";

	string ID,I;
	bool test = false;
	while (getline(fr,ID))
	{
		//getline(fr,ID);
		cout << "recherche de client...\n" ;
		istringstream iss(ID);
		iss >> I;
		cout << "ID :  "<< I <<"   \n";

		if (I == IDcl)
		{
			cout << " le client avec le ID : "<<I<<" existe deja!!..\n";
			inter.close ();
			fr.close();
			test = true;
			break;
			exit(0);
		}
	}

	if (!test)
	{
		cout << "traitement d'enregistrement de client est en cours...\n";

		filebuf *pbuf = inter.rdbuf();

		size_t size = pbuf ->pubseekoff(0, inter.end, inter.in);
		pbuf->pubseekpos (0, inter.in);

		char* buff = new char[size];

		pbuf->sgetn(buff, size);

		if(size < 0)
			cerr << "erreur";

		fr.write(buff,size);
		inter.close();
		fr.close();
		delete [] buff;

		cout << "client enregistré !! ...\n"; 
	}
}


Afficher la suite 

1 réponse

Répondre au sujet
mamiemando 28092 Messages postés jeudi 12 mai 2005Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 18 août 2017 à 10:34
0
Utile
Bonjour,

Sans rentrer dans les détails du code, pourquoi ne pas ouvrir A.txt en mode append et écrire le contenu de B.txt ainsi en fin de fichier ?
https://stackoverflow.com/questions/2393345/how-to-append-text-to-a-text-file-in-c

Bonne chance
Commenter la réponse de mamiemando