在C语言中,读取二进制文件中的记录数之前,需要先了解文件的结构。以下是一个简单的示例,展示了如何在读取数组之前嗅探二进制文件中的记录数。
首先,创建一个二进制文件,其中包含一些记录:
#include<stdio.h>
#include <stdlib.h>
typedef struct {
int id;
float value;
} Record;
int main() {
Record records[] = {
{1, 1.23},
{2, 4.56},
{3, 7.89},
};
int num_records = sizeof(records) / sizeof(records[0]);
FILE *file = fopen("records.bin", "wb");
if (file == NULL) {
printf("Error opening file!\n");
exit(1);
}
fwrite(records, sizeof(Record), num_records, file);
fclose(file);
return 0;
}
接下来,编写一个C程序来读取二进制文件并嗅探记录数:
#include<stdio.h>
#include <stdlib.h>
typedef struct {
int id;
float value;
} Record;
int main() {
FILE *file = fopen("records.bin", "rb");
if (file == NULL) {
printf("Error opening file!\n");
exit(1);
}
// 获取文件大小
fseek(file, 0, SEEK_END);
long file_size = ftell(file);
fseek(file, 0, SEEK_SET);
// 计算记录数
int num_records = file_size / sizeof(Record);
// 读取数组
Record *records = (Record *) malloc(file_size);
fread(records, sizeof(Record), num_records, file);
fclose(file);
// 输出记录
for (int i = 0; i < num_records; i++) {
printf("Record %d: ID = %d, Value = %.2f\n", i + 1, records[i].id, records[i].value);
}
free(records);
return 0;
}
在这个示例中,我们首先获取文件的大小,然后计算记录数。接下来,我们读取整个文件到一个动态分配的数组中,并输出每个记录。
请注意,这个示例仅适用于具有固定大小记录的二进制文件。对于更复杂的文件结构,您可能需要更复杂的解析逻辑。
领取专属 10元无门槛券
手把手带您无忧上云