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

cs_dony Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 11 août 2004 - 11 août 2004 à 13:21
cs_dony Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 11 août 2004 - 11 août 2004 à 18:40
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

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
11 août 2004 à 13:31
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é.
0
cs_dony Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 11 août 2004
11 août 2004 à 13:43
mais justement ce n'est pas une liste chainée...

il s'agit d'un fichier ou est socké ke des structres
DonyNightClubber
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 août 2004 à 13:45
tu pompe le fichier en memoire et tu reecris (en ecrasant) ce que tu veux
0
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 2004 à 13:46
- 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++
0

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

Posez votre question
DevGizmo Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 27 février 2007 1
11 août 2004 à 14:55
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....
0
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 2004 à 15:03
DevGizmo > et ça supprimera un enreg du fichier ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 août 2004 à 15:15
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);
}
0
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 2004 à 15:19
djl > t'es sur que c'est plus rapide que le mien ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 août 2004 à 15:22
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
0
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 2004 à 15:23
ah mince alors, j'attendais que tu me dises 'c'est portable'.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 août 2004 à 15:27
c'est standard donc portable ;)
0
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 2004 à 15:28
merci, me manquait.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_dony Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 11 août 2004
11 août 2004 à 18:40
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
0
Rejoignez-nous