如何在阅读时移入二进制文件?
How can I shift In a binary file while reading?
我将能够逐字节读取我所有的结构字节(字节块很大 "sizeof(Today)" 所以它有 8 个字节大)。我尝试了越来越多,但我做不到!请帮帮我!
bin文件:"temp.bin"
我的结构:
typedef struct
{
int year;
int month;
} Today;
这是每个周期应读取 8 个字节的代码的一部分:
Today *d;
d = malloc(sizeof(Today));
fp = fopen("temp.bin", "rb");
while(!feof(fp))
{
fread(d, sizeof(Today), 1, fp);
printf("Year = %i\n", d->year);
printf("Month = %i\n", d->month);
}
fclose(fp);
while 条件和 fread() 函数更有可能是错误的,但我尝试了所有可能的组合,但输出永远不是正确的!
谢谢大家
您可能想先为所有块分配 space,例如
fp = fopen( "temp.bin", "rb" );
if ( fp != NULL )
{
fseek( fp, 0L, SEEK_END );
size_t size = ftell(fp);
rewind(fp);
Today *d;
d = malloc(size);
fread( d, sizeof(Today), size/sizeof(Today), fp );
fclose(fp);
}
然后你得到了数组中的结构
例如printf( "month: %d", d[5].month);
然后对数组中的每个元素执行您需要执行的操作,然后再将其写回。取决于你的文件有多大
你的代码没有任何内容,我猜你的文件格式不是你想的那样。
我也想知道为什么你必须为结构分配内存。
此处的代码与您提供的代码类似。它只是演示以您描述的格式写入数据,然后在没有任何丢失的情况下检索它。
#include <stdio.h>
#include <string.h>
typedef struct
{
int year;
int month;
} Today;
#define DataFile "temp.bin"
int main(){
Today d;
printf("sizeof(Today)=%d\n",sizeof(Today));
FILE *fp = fopen(DataFile, "wb");
for(int i=1;i<13;i++){
d.month=i;
d.year=2000+i;
fwrite(&d, sizeof(Today), 1, fp);
}
fclose(fp);
printf("write complete, press a key to read\n");
_getch();
fp = fopen(DataFile, "rb");
while(fread(&d, sizeof(Today), 1, fp)){
printf("Year = %i\t", d.year);
printf("Month = %i\n", d.month);
}
fclose(fp);
return 0;
}
我将能够逐字节读取我所有的结构字节(字节块很大 "sizeof(Today)" 所以它有 8 个字节大)。我尝试了越来越多,但我做不到!请帮帮我!
bin文件:"temp.bin"
我的结构:
typedef struct
{
int year;
int month;
} Today;
这是每个周期应读取 8 个字节的代码的一部分:
Today *d;
d = malloc(sizeof(Today));
fp = fopen("temp.bin", "rb");
while(!feof(fp))
{
fread(d, sizeof(Today), 1, fp);
printf("Year = %i\n", d->year);
printf("Month = %i\n", d->month);
}
fclose(fp);
while 条件和 fread() 函数更有可能是错误的,但我尝试了所有可能的组合,但输出永远不是正确的! 谢谢大家
您可能想先为所有块分配 space,例如
fp = fopen( "temp.bin", "rb" );
if ( fp != NULL )
{
fseek( fp, 0L, SEEK_END );
size_t size = ftell(fp);
rewind(fp);
Today *d;
d = malloc(size);
fread( d, sizeof(Today), size/sizeof(Today), fp );
fclose(fp);
}
然后你得到了数组中的结构
例如printf( "month: %d", d[5].month);
然后对数组中的每个元素执行您需要执行的操作,然后再将其写回。取决于你的文件有多大
你的代码没有任何内容,我猜你的文件格式不是你想的那样。
我也想知道为什么你必须为结构分配内存。
此处的代码与您提供的代码类似。它只是演示以您描述的格式写入数据,然后在没有任何丢失的情况下检索它。
#include <stdio.h>
#include <string.h>
typedef struct
{
int year;
int month;
} Today;
#define DataFile "temp.bin"
int main(){
Today d;
printf("sizeof(Today)=%d\n",sizeof(Today));
FILE *fp = fopen(DataFile, "wb");
for(int i=1;i<13;i++){
d.month=i;
d.year=2000+i;
fwrite(&d, sizeof(Today), 1, fp);
}
fclose(fp);
printf("write complete, press a key to read\n");
_getch();
fp = fopen(DataFile, "rb");
while(fread(&d, sizeof(Today), 1, fp)){
printf("Year = %i\t", d.year);
printf("Month = %i\n", d.month);
}
fclose(fp);
return 0;
}