结构:
typedef struct file {
char name[20];
int size;
int offset;
} file;
二进制文件的结构:
number of files --> 4 bytes
file structs --> 28 bytes each
content of files --> <offset>
我想更新二进制文件中结构中文件的偏移量。这是我的实现:
int writeOffsets(char *archiveFile, file list[]) {
FILE *binFile;
int numFiles;
file index[MAX];
binFile = fopen(archiveFile, "wb+");
fwrite(&numFiles, sizeof(numFiles), 1, binFile);
for (int i = 0; i < numFiles; i++) {
while (fread(index, sizeof(file), 1, binFile) == 1) {
fseek(binFile, -(sizeof(file)), SEEK_CUR);
printf("For Offset\n");
printf("before %d\n", index[i].offset);
fwrite(list, sizeof(file), 1, binFile);
printf("after %d\n", index[i].offset);
}
}
fclose(binFile);
return 0;
}
但是,当我查看我的二进制文件时,大部分内容都被删除了。目前我如何到达该位置并修改 offset 成员变量?
I'm trying to modify the content of binary file(it contains structs)
I want to delete some structs
void supprimerLivre(int codeLivre, FILE *fichier)
{
FILE *tempFichier = fopen("temp.bin", "wb+");
if (tempFichier == NULL)
{
printf("Erreur lors de la création du fichier temporaire.\n");
return;
}
livre l;
int found = 0;
while (fread(&l, sizeof(livre), 1, fichier))
{
if (l.codelivre != codeLivre)
{
fwrite(&l, sizeof(livre), 1, tempFichier);
}
else
{
found = 1;
}
}
fclose(fichier);
fclose(tempFichier);
if (found==0)
{
remove("livres.bin");
rename("temp.bin", "livres.bin");
printf("Le livre avec le code %d a été supprimé avec succès.\n", codeLivre);
}
else
{
remove("temp.bin");
printf("Aucun livre avec le code %d n'a été trouvé.\n", codeLivre);
}
}
void supprimerLivre(int codeLivre, FILE *fichier)
{
FILE *tempFichier = fopen("temp.bin", "wb+");
if (tempFichier == NULL)
{
printf("Erreur lors de la création du fichier temporaire.\n");
return;
}
livre l;
int found = 0;
while (fread(&l, sizeof(livre), 1, fichier))
{
if (l.codelivre != codeLivre)
{
fwrite(&l, sizeof(livre), 1, tempFichier);
}
else
{
found = 1;
}
}
fclose(fichier);
fclose(tempFichier);
if (found==0)
{
remove("livres.bin");
rename("temp.bin", "livres.bin");
printf("Le livre avec le code %d a été supprimé avec succès.\n", codeLivre);
}
else
{
remove("temp.bin");
printf("Aucun livre avec le code %d n'a été trouvé.\n", codeLivre);
}
}
but this function always return an empty file
I hope you can help me