首先在VS2010中遇到的问题是,建立了一个结构体
struct position{
int x;
int y;
};
然后用此结构体声明一个数组rout[8];
for(int i=0;i<8;i++)
rout[i]=i+25;
然后把结构体数据存储到文件中
fwrite(&rout[i],sizeof(position),1,fp);
从文件中直接观察到的字节数为sizeof(position)*8,但是读取数据时
fread(temp,sizeof(position),1,fp);
并不能读取到文件的结尾处就结束。
后来发现是读取到rout[i].x=26时就结束。
问题1,读到这个26就结束的原因是什么?
在验证过程中,有以下代码
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+25;
FILE *fp=fopen("rout_list13.txt","w");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","r");
while(t<10)
{
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
发现输出的结果一直是
问题2:问什么会出现值不变的情况?
对以上代码做以下更改
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+6;
FILE *fp=fopen("rout_list13.txt","w");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","r");
while(t<10)
{
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
可以看到出现这样的结果
首先分析数组存在10个数从6到15结束,但是读取了20次,当读取到结尾处时数据一直不变。
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+20;
FILE *fp=fopen("rout_list13.txt","w");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","r");
while(t<10)
{
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
结果是
所以由以上的调试过程可以得到以下结论:当文件数据读取结束后,在对文件进行读取时值为最后读取的结果并保持不变,可以回答问题2.
继续讨论问题1,通过用fseek函数进行定位,发现26这一个数在文件中占用4个字节的数据。
后面百度了一下26的文件读取问题,得到了解决的方法。
在向文件中写或读数据时用二进制进行表示。代码如下
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+24;
FILE *fp=fopen("rout_list13.txt","wb");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","rb");
while(t<5)
{
fread(&temp,4,1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
结果为
问题1也得到了解决。