Insérer/supprimer charactères dans un fichier

gwenChina Messages postés 13 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 27 août 2005 - 9 août 2005 à 10:42
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 11 août 2005 à 10:07
Bonjour,

En fait je doit aller modifier des charatères a l'intérieur d'un fichier (octet par octet). J'arrive tout a fait à écrire dans le fichier en réécrivant par dessus les octets existants mais je n'arrive pas a savoir comment je peux insérer des charatères (sans modifier celui d'avant) ou tout simplement supprimer des charactères.
J'ouvre mon fichier avec fopen en mode "rb+". Peut-etre faut-il que je change de mode d'ouverture de mon fichier.
Sinon y-t'il des fonctions qui permettent d'insérer ou de modifier des octets??

Merci d'avance pour vos réponses

GwenChina

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2005 à 10:56
Pour insérer faut d'abord récupérer toout ce qu'il y a après la position du pointeur fichier, tamponner ce que tu veux ajouter et retamponner ce que tu as récupéré à l'étape 1.

ciao...
BruNews, MVP VC++
0
gwenChina Messages postés 13 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 27 août 2005
10 août 2005 à 11:39
Merci pour l'info,

Le problème c'est que ca marche seulement si je veux insérer des charactères supplémentaires.
Mon fichier est composés de champs que je dois venir modifier. Donc si l'ancien champs est plus long que le nouveau, il faut que je supprime des charactères à la fin du fichier.
En fait je copie tout ce qu'il y a apres le champs a modifier dans un tampon, je réécris le nouveau champs par-dessus l'ancien champs et je viens recoller juste derrière la nouvelle valeur, le tampon. Mais si mon fichier final est plus petit que l'ancien, il va falloir que je supprime les charactères en trop en fin de fichier.
Y'a-t-il une fonction C qui permet la suppression de charactères, ou encore la suppression de tout ce qu'il y a dans le fichier (dans ce cas je réécris le fichier)??
Sinon, est-ce que je peux ouvrir deux fichier de même nom, un en lecture et l'autre en écriture et dans ce cas je recopie tout dans l'autre fichier?? Car mon fichier doit garder le même nom.

J'ai déja essayé pas mal de chose mais rien ne marche...

Merci d'avance

GwenChina
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 12:08
Ecris ton fichier avec des champs de logueur fixe (des structures), ça règlera le problème et sera beaucoup plus rapide d'accès.
Possible dans ton cas ??? à toi de voir.

Sinon je n'utilise que API Windows pour les fichiers:
CreateFile() pour ouverture ou création.
ReadFile() lecture.
WriteFile() écriture.
SetEndOfFile() tronquer.
CloseHandle() fermeture.

ciao...
BruNews, MVP VC++
0
gwenChina Messages postés 13 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 27 août 2005
11 août 2005 à 05:00
Mes champs ne peuvent pas avoir une taille fixe, c'est bien dommage d'ailleurs, je me prendrais moins la tete!!
En plus je ne peux pas utiliser d'API windows puisque mon logiciel est destine a une utilisation sur PRKernel, sur une systeme embarque. Ce qui complique d'autant plus les choses...
En fait est-ce que la fonction feof (FILE *stream) (stdio.h) est la meme que SetEndOfFile()? Car dans ce cas si je connais la nouvelle taille de mon fichier et que je lui affecte une nouvelle fin de fichier, mon fichier devrait prendre la nouvelle taille, n'est-ce pas??

Merci d'avance

GwenChina
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2005 à 10:07
Devrait aller du moment que ça tronque le fichier à la position voulue.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous