Suppression dans un fichier en C++
Fermé
maryy
Messages postés
14
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
26 mai 2004
-
1 mai 2002 à 11:33
ariock Messages postés 125 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 31 janvier 2005 - 4 mai 2002 à 20:16
ariock Messages postés 125 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 31 janvier 2005 - 4 mai 2002 à 20:16
Bonjour !
Bon voilà je débute le c++ et je galère pas mal en ce qui concerne les fichiers. Je ne trouve pas bcp de docs en plus. Je voudrais juste savoir comment on fait pour supprimer un enregistrement dans un fichier dans un programme en c++.
Je vous remercie d'avance !
Bon voilà je débute le c++ et je galère pas mal en ce qui concerne les fichiers. Je ne trouve pas bcp de docs en plus. Je voudrais juste savoir comment on fait pour supprimer un enregistrement dans un fichier dans un programme en c++.
Je vous remercie d'avance !
A voir également:
- Suppression dans un fichier en C++
- Forcer suppression fichier - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir un fichier .bin - Guide
2 réponses
ariock
Messages postés
125
Date d'inscription
dimanche 28 avril 2002
Statut
Membre
Dernière intervention
31 janvier 2005
5
1 mai 2002 à 12:22
1 mai 2002 à 12:22
Tu connais la programmation C? ben pareil... enfin tu peux toujours te servir des memes fonctions quoi... mais il y a aussi les flux, ofstream et ifstream qui facillitent pas mal de chose...
Pour ta question de suppresion:
Je suppose que tu a un fichier binaire ou tu enregistres des structures en pure sequentiel? Quel que soit ton organisation, le meilleur moyen de suprimer, c'est une suppresion logique avec un flag. Si tu tien a re-occuper les places vides, il faut que tu programme toi meme une gestion un peu plus complexe que simplement ajouter en bout...
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
Pour ta question de suppresion:
Je suppose que tu a un fichier binaire ou tu enregistres des structures en pure sequentiel? Quel que soit ton organisation, le meilleur moyen de suprimer, c'est une suppresion logique avec un flag. Si tu tien a re-occuper les places vides, il faut que tu programme toi meme une gestion un peu plus complexe que simplement ajouter en bout...
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
2 mai 2002 à 10:19
J'utilise ofstream et ifstream pour les manip de fichiers en c++, donc je dois pas être loin de la vérité ! :p
Pour ma suppression :
En fait, j'ai un fichier dans lequel j'enregistre des enregistrements de type d'une classe avec "fout.write((char*) &nouveau, sizeof (Chroniqueur));", donc les enregistrements sont séquentiels.
Ce que j'ai commencé à faire pour ma suppression c'est ouvrir mon fichier en lecture et un fichier temporaire en écriture. Je voulais recopier tous les enregistrements à garder dans le temporaire (sans celui que je dois effacer) et par la suite, supprimer mon fichier original chroniqueurs.txt et renommer mon temporaire en films.txt. Voici mon prog :
void Film::supprimerfilm()
{
char titre[10], numero[8];
int compar;
int compt=0;
Film suppression;
//ouverture du fichier films.txt en lecture
ifstream fin ("films.txt", ios::in);
ofstream fout ("temp.txt");
cout<<"film a supprimer : ";
cin>>titre;
cout<<endl;
cout<<endl;
while (fin.read((char*) &suppression, sizeof (Film)))
{
compar=strcmp(suppression.titrefilm,titre);
if (compar == 0)
compt++;
}
if (compt == 0)
cout<<"ce film n'est pas enregistre"<<endl;
if (compt > 1)
{
cout<<"il existe plusieurs films avec ce titre"<<endl;
cout<<endl;
while (fin.read((char*) &suppression, sizeof (Film)))
{
compar=strcmp(suppression.titrefilm,titre);
if (compar == 0)
{
cout<<"numero : "<<suppression.numfilm<<endl;
cout<<"titre : "<<suppression.titrefilm<<endl;
cout<<"annee : "<<suppression.anneefilm<<endl;
cout<<endl;
}
cout<<"entrez le numero du film a supprimer : ";
cin>>numero;
}
}
if (compt != 0)
{
while (fin.read((char*) &suppression, sizeof (Film)))
{
if (compt == 1)
compar=strcmp(suppression.titrefilm,titre);
if (compt > 1)
compar=strcmp(suppression.numfilm, numero);
if (compar != 0)
{
//faire la suppression
do
{
fin.read((char*) &suppression, sizeof (Film));
if (fin.good())
fout.write((char*) &suppression, sizeof (Film));
}
while (!fin.eof());
}
}
}
fout.close();
fin.close();
}
Ce prog se compile bien mais ne recopie rien du tout dans le fichier temporaire ! Est-ce que vous voyez mon erreur ?
Maryy
2 mai 2002 à 10:39
Le seul vrai point qui me parait interessant, c'est de faire un flush avant de fermer ton fichier out...
Un autre petit detail qui peut etre utile c'est de ne pas te servir de la methode .write, mais de l'operateur << que tu peus surcharger pour ta classe film si le coeur t'en dis. Je n'ai jamais bien saisis pourquoi, mais l'operateur << et .write ne donnent pas toujours le meme resultat.
Ton fichier tmp il est a 0 byte ou il y a des crasses?
(Serieusement tu crois pas que de faire une gestion un peu plus pousee te ferais gagner en performence?)
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
2 mai 2002 à 10:52
bien vu, la j´ai une question comment ca ce fait que ton message est envoiyé a 10:39:23 (GMT+1), le mien est à à 10:33 GMT+1
et que l´ordonnecement des message est inversé,
j´ai peut etre une explication que ton horloge system est en avance de 6 mn :-).
2 mai 2002 à 11:02
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
2 mai 2002 à 11:05
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.