c语言文件缓冲区

djpangxie 2009-08-29 11:07:16
各位大侠晚上好,是这样的,我打算从一个已经用fwrite写入磁盘的文件再次读到程序中来,用fseek来动态定位。

FILE *wenjian;
for(i=0;1;)
{
fseek(wenjian,2+i,0);
fread(q1,20+i,1,wenjian);
fseek(wenjian,68+i,0);
fread(&q1->gongzi,4,1,wenjian);
i+=116;
(还有其他的控制机制以中断循环.....)
}

i是一个增量,增加间隔就是每个数据项的间隔,可是文件是储存在文件缓冲区的,那么定位的时候就会超出,这时候文件缓冲区是什么动作?会刷新吗?
会刷新的话定位的指针会不会移动到开头+超出部分?不会刷新那又该怎么办?
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TTOJJ 2009-08-30
  • 打赏
  • 举报
回复
郁闷死~~你不会用数据结构吗????

Struct testStruct
{
int ID;
char[10] name;
...
}

要写入的时候定义一个文件头,包含文件格式,文件大小,等等信息

struct headStruct
{
int size;
int type;
....
}

这样一来,读文件的时候先读头信息,然后按照sizeof(testStruct)来读,填充到testStruct中就好拉,你那个东西根本........如果读取地址超拉的话直接就是错误返回值,没别的动作

djpangxie 2009-08-30
  • 打赏
  • 举报
回复
没有人知道吗?
djpangxie 2009-08-30
  • 打赏
  • 举报
回复
今天我自己硬是去试过了,结果是这样的:
在visual c++中如果用fseek库函数定位超出了,是会自动刷新缓冲区的并且会计算指针位置自动找到理想的位置,呵呵,这可能是这个库函数一大特色吧,而且发现在使用fseek(文件指针,-10,1);也就是往前定位的时候如果低出文件缓冲区,会自动刷新到上一个缓冲区,并且找到适当的指针,写vc编译器的人果然就是牛B,肯定是还有一个记录属性用来记录当前缓冲区为文件的第几段,这样的话,可以直接把缓冲区当作整个文件来用。
djpangxie 2009-08-29
  • 打赏
  • 举报
回复
啊,则么久了,难道大家都没有试过,都不知道?还是分少了?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧