Ecrire dans un fichier en C/C++

mateo13 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   148
 
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