Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104633493
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 19:48:10

 来源:

int fseek(FILE *fp,long d,int pos)
f p是文件指针,d是位移量,p o s是起始点。
P o s的取值为:
0 :文件开始处
1 :文件的当前位置
2 :文件的尾部
位移量d是l o n g型的数据,可以为正或负值。表示从起始点向下或向上的指针移动。函数
的返回值若操作成功为0,操作失败为非零。
例如:f s e e k ( f p , 5 L , 0 );将文件指针从文件头向下移动5个字节。
f s e e k ( f p , - 1 0 L , 2 );将文件指针从当前位置向上移动1 0个字节。
rewind() 将文件指针移动到文件头。
ftell(FILE *fp) 返回文件指针的当前位置。
[例8-9] 写入5个学生记录,记录内容为学生姓名、学号、两科成绩。写入成功后,随机
读取第三条记录,并用第二条记录替换。
#include
#include
#define n 5
m a i n ( )
{
FILE *fp1; / *定义文件指针* /
char *temp;
int i,j;
struct stu{ / * 定义学生记录结构* /
char name[15];
char num[6];
float score[2];
} s t u d e n t [ n ] ;
if ((fp1=fopen("test.txt","wb"))==NULL) / *以二进制只写方式打开文件* /
{
printf("cannot open file");
e x i t ( 0 ) ;
}
for( i=0;i{
printf("input name:"); / *输入姓名* /
g e t s ( s t u d e n t [ i ] . n a m e ) ;
printf("input num:");
g e t s ( s t u d e n t [ i ] . n u m ) ; / *输入学号* /
printf("input score1:");
g e t s ( t e m p ) ; / *输入一科成绩* /
s t u d e n t [ i ] . s c o r e [ 0 ] = a t o f ( t e m p ) ;
printf("input score2:");
g e t s ( t e m p ) ; / * 输入第二科成绩* /
s t u d e n t [ i ] . s c o r e [ 1 ] = a t o f ( t e m p ) ;
fwrite(&student[i],sizeof(struct stu),1,fp1);成 块/*写入*/
}
fclose(fp1); /*关闭* /
if ((fp1=fopen("test.txt","rb+"))==NULL)
{ /*以可读写方式打开文件* /
printf("cannot open file");
e x i t ( 0 ) ;
}
p r i n t f ( " - - - - - - - - - - - - - - - - - - - - - \ n " ) ;
p r i n t f ( " % - 1 5 s % - 7 s % - 7 s % - 7 s \ n " , " n a m e " , " n u m " , " s c o r e 1 " , " s c o r e 2 " ) ;
p r i n t f ( " - - - - - - - - - - - - - - - - - - - - - \ n " ) ;
for (i=0;i{ /*显示全部文件内容* /
fread(&student[i],sizeof(struct stu),1,fp1);
p r i n t f ( " % - 1 5 s % - 7 s % 7 . 2 f % 7 . 2 f \ n " , s t u d e n t [ i ] . n a m e , s t u d e n t [ i ] . n u m ,
s t u d e n t [ i ] . s c o r e [ 0 ] , s t u d e n t [ i ] . s c o r e [ 1 ] ) ;
}
/ *以下进行文件的随机读写* /
fseek(fp1,3*sizeof(struct stu),0)/;* 定位文件指针指向第三条记录*/
fwrite(&student[1],sizeof(struct stu),1,fp1);
/ * 在第三条记录处写入第二条记录* /
rewind(fp1); /*移动文件指针到文件头* /
p r i n t f ( " - - - - - - - - - - - - - - - - - - - - - \ n " ) ;
p r i n t f ( " % - 1 5 s % - 7 s % - 7 s % - 7 s \ n " , " n a m e " , " n u m " , " s c o r e 1 " , " s c o r e 2 " ) ;
p r i n t f ( " - - - - - - - - - - - - - - - - - - - - - \ n " ) ;
for (i=0;i{ /*重新输出文件内容* /
fread(&student[i],sizeof(struct stu),1,fp1);
p r i n t f ( " % - 1 5 s % - 7 s % 7 . 2 f % 7 . 2 f \ n " , s t u d e n t [ i ] . n a m e , s t u d e n t [ i ] . n u m ,
s t u d e n t [ i ] . s c o r e [ 0 ] , s t u d e n t [ i ] . s c o r e [ 1 ] ) ;
}
f c l o s e ( f p 1 ) ; / *关闭文件* /
}


程序的第二次输出,即随机访问后,文件中会有两条相同的记录。
阅读(257) | 评论(0) | 转发(0) |
0

上一篇:缓冲文件系统(2)

下一篇:共用体

给主人留下些什么吧!~~