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

Fermé
bika12 Messages postés 1 Date d'inscription dimanche 8 mai 2016 Statut Membre Dernière intervention 18 juin 2017 - Modifié le 18 août 2017 à 10:32
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 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"; 
	}
}


1 réponse

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
18 août 2017 à 10:34
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
0