Ecrire dans un fichier en C/C++

Fermé
mateo13 Messages postés 77 Date d'inscription dimanche 16 septembre 2007 Statut Membre Dernière intervention 15 février 2010 - 21 janv. 2010 à 13:53
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 21 janv. 2010 à 19:42
Bonjour,

je souhaite écrire dans un fichier des entiers, ceci est fait par une procédure, avec en entrée le fichier, l'entier à ajouté avec sa position.
j'ai quelques problèmes, quand j'ajoute en fin de fichier tout marche très bien jusqu'à 3 entiers, au bout du 4ème plus rien ne s'écrit apparemment, de plus quand je choisis la position 0 je voudrais décalé tous vers la droite mais cela ne marche pas, ça m'écrase des entiers,
je vous passe ma procédure d'ajout et aussi celle d'affichage:

void AffListe (FILE *fichier)
{
int m;

fseek(fichier,0, SEEK_SET);

fread(&m, sizeof(int), 1, fichier);

while (!feof(fichier) )
{
cout<<m<<", ";
fread(&m, sizeof(int), 1, fichier);
}
}



void AjoutElem (int x, int pos, FILE *fichier)
{
int i, nb;

if (pos*sizeof(int) > TailleFich(fichier)) //TailleFich(fichier), renvoie la taille du fichier en octets.
{
fseek(fichier, 0, SEEK_END);
fwrite(&x,sizeof(int),1,fichier);
}
else
{
if(pos< 0)
{
pos = 0;
}

for(i = TailleFich(fichier); i>=pos*sizeof(int); i = i - sizeof(int))
{
fseek(fichier, i, SEEK_SET);
fread(&nb, sizeof(int), 1, fichier);
fwrite(&nb, sizeof(int), 1, fichier);
}

fseek(fichier, pos*sizeof(int), SEEK_SET);
fwrite(&x, sizeof(int), 1, fichier);
}

}


Voila, j'espère pouvoir résoudre ce problème.
Merci à tous.
A voir également:

1 réponse

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
21 janv. 2010 à 19:42
Je n'ai pas détaillé tout le programme car il est difficile à lire car non indenté. Mais on voit que cela ne peut pas fonctionner; pour ajouter des données dans un fichier, il y a deux solutions:
- si on ajoute des données en fin de fichier, il suffit d'ouvrir le fichier en mode 'a', et d'y écrire directement les données car le pointeur d'écriture est placé, par défaut, en fin de fichier,
- si on veut insérer des données, la solution est plus complexe: il faut créer un second fichier en mode 'w', lire les données du premier fichier (ouvert en mode 'r' qui place le pointeur de lecture en début de fichier) et les copier dans le second, puis y ajouter les nouvelles données et terminer par la lecture du reste des données du premier fichier et leur écriture dans le second. Après les fermetures, on efface le premier fichier ou on le renomme à des fins de backup, puis on termine en renommant le second fichier avec l'ancien nom du premier fichier.
Bonne continuation.
0