Supprimmer un bloc dans un fichier crée en langage C

Signaler
Messages postés
6
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
11 août 2004
-
Messages postés
6
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
11 août 2004
-
Bonjout @ tous!!

Je boss sous Visual C ,

voila mon probleme:
Aprés avoir crée un fichier qui contient des structures,
j'aimerai utiliser une fonction ( j'espere qu'elle existe) qui supprimme un bloc à l'intérieur du fichier.
jespere que je me suis fait bien comprendre!

voici un schéma pour mieux comprendre :

fic ( A , B , C , D )
où A,B,C et D sont des structures.
Si je souhaite supprimer le bloc C ?? comment faire ??
à la fin je souhaiteraiu avoir :
fic ( A,B,D)

MErci pour votre aide !!!

DonyNightClubber

13 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Utilisation de liste chainés, regarde sur le site, plein d'exemple ! Et puis ce n'est pas un "bloc", mais un maillon en langage liste chainé.
Messages postés
6
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
11 août 2004

mais justement ce n'est pas une liste chainée...

il s'agit d'un fichier ou est socké ke des structres
DonyNightClubber
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
tu pompe le fichier en memoire et tu reecris (en ecrasant) ce que tu veux
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
- Tu positionnes a la fin de struct C par SetFilePointer.
- Aspire le reste du fichier par ReadFile dans un buffer.
- Repositionne devant C par SetFilPointeur.
- Tamponne taille aspiree par WriteFile.
- SetEndOfFile.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
122
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
27 février 2007
1
Ouais........
Y a ca aussi comme sol:

- tu additionne la taille de tes structures A et B (attention aux zones dynamique si il y en a: car il faut aussi les comptabilises)
- ensuite tu ouvre ton fichier
- tu fais un fseek a la taille que tu as precedemment calcule
- tu fais un fread de la taille de la structure C que tu veux recupere (pareil, attention aux zones dynamique)
- tu fais un fclose
Tu mets des petites protections par ci et par la.... ;)))
et c'est bon....
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
DevGizmo > et ça supprimera un enreg du fichier ?

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
non, ca y sera toujours

typedef struct
{
...
} my_struct;

int main( int argc, char *argv[])
{
FILE *f;
my_struct *s;
long size;
size_t nb_s, i;

f = fopen( argv[1], "rb" );

fseek( f, 0, SEEK_END );
size = ftell(f);
rewind(f);

nb_s = size / sizeof *s;
s = malloc( size );

fread( s, size, 1, f);

fclose(f);
f = fopen( argv[1], "wb" );

for( i =0; i < nb_s; i++ )
{
/* pour enlever la 6e structure */
if( i != 5 ) fwrite( &s[i], sizeof *s, 1, f);
}

fclose( f );
free(s);
}
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
djl > t'es sur que c'est plus rapide que le mien ?

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
je suis sur que non, moi je donne la solution standard apres il fait ce qu'il veut, j'avais pas vu qu'il etait sous visual
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
ah mince alors, j'attendais que tu me dises 'c'est portable'.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est standard donc portable ;)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
merci, me manquait.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
6
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
11 août 2004

ok merci les gars !!

je vai opter pour cette solution :

créer un fichier tampon;
copier le fichier sauf la truct a supprimer;
copier le fichier tampon dans le fichier de départ.

Merci
DonyNightClubber