设为首页收藏本站 |天气与日历| 2025-04-20 星期日 07:51:00 乙巳(蛇)年 三月廿三 辰时 谷雨
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 127|回复: 0

fseek()移动文件流光标

[复制链接]

954

主题

954

帖子

3875

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3875
发表于 2021-12-7 13:01:55 | 显示全部楼层 |阅读模式
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
功能:移动文件流(文件光标)的读写位置。
参数:
        stream:已经打开的文件指针
        offset:根据whence来移动的位移数(偏移量),可以是正数,也可以负数,如果正数,则相对于whence往右移动,如果是负数,则相对于whence往左移动。如果向前移动的字节数超过了文件开头则出错返回,如果向后移动的字节数超过了文件末尾,再次写入时将增大文件尺寸。
        whence:其取值如下:
                SEEK_SET:从文件开头移动offset个字节
                SEEK_CUR:从当前位置移动offset个字节
                SEEK_END:从文件末尾移动offset个字节
返回值:
        成功:0
        失败:-1


#include <stdio.h>
long ftell(FILE *stream);
功能:获取文件流(文件光标)的读写位置。
参数:
        stream:已经打开的文件指针
返回值:
        成功:当前文件流(文件光标)的读写位置
        失败:-1

[C] 纯文本查看 复制代码
#include <stdio.h>
void rewind(FILE *stream);
功能:把文件流(文件光标)的读写位置移动到文件开头。
参数:
        stream:已经打开的文件指针
返回值:
        无返回值
typedef struct Stu
{
        char name[50];
        int id;
}Stu;
//假如已经往文件写入3个结构体
//fwrite(s, sizeof(Stu), 3, fp);
Stu s[3];
Stu tmp;
int ret = 0;
//文件光标读写位置从开头往右移动2个结构体的位置
fseek(fp, 2 * sizeof(Stu), SEEK_SET);
//读第3个结构体
ret = fread(&tmp, sizeof(Stu), 1, fp);
if (ret == 1)
{
        printf("[tmp]%s, %d\n", tmp.name, tmp.id);
}
//把文件光标移动到文件开头
//fseek(fp, 0, SEEK_SET);
rewind(fp);
ret = fread(s, sizeof(Stu), 3, fp);
printf("ret = %d\n", ret);
int i = 0;
for (i = 0; i < 3; i++)
{
        printf("s === %s, %d\n", s.name, s.id);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-4-20 07:51 , Processed in 0.085867 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表