一句话理解 rewind
「一键让文件‘时光倒流’到起点,同时清除所有错误状态,让文件重新焕发活力!」
函数原型
#include // 必须包含头文件
void rewind(FILE *stream);
入口参数
参数 | 类型 | 比喻解释 |
stream | FILE* | 文件的「时光机控制台」(文件指针) |
返回参数
返回值 | 含义 |
无 | 永不失败(但需确保文件有效) |
核心功能图解
文件内容:A B C D E F G H I J
当前游标在 F 的位置 → 调用 rewind → 游标回到 A
代码实例1:重复读取文件内容
场景:不关闭文件,反复读取同一文件
#include
int main() {
FILE *file = fopen("story.txt", "r");
if (!file) {
perror(" 故事书打不开");
return 1;
}
// 第一次读取
char buffer[100];
printf("==== 第一遍阅读 ====\n");
while (fgets(buffer, sizeof(buffer), file) {
printf("%s", buffer);
}
// 时光倒流:回到起点 + 清除错误标志
rewind(file);
// 第二次读取
printf("\n==== 第二遍阅读 ====\n");
while (fgets(buffer, sizeof(buffer), file)) {
printf("%s", buffer);
}
fclose(file);
return 0;
}
代码实例2:修复错误状态
场景:处理文件错误后重试
#include
int main() {
FILE *file = fopen("data.bin", "rb");
if (!file) {
perror(" 磁盘异常");
return 1;
}
// 尝试读取超出文件范围
fseek(file, 1000, SEEK_SET);
char data[10];
if (fread(data, 1, 10, file) < 10) {
if (feof(file)) {
printf(" 已到文件末尾\n");
} else if (ferror(file)) {
printf(" 读取发生错误\n");
}
}
// 时光倒流:重置错误状态并回到起点
rewind(file);
printf("错误状态已清除:%d\n", ferror(file)); // 输出0
// 重新读取文件开头
fread(data, 1, 10, file);
printf("前10字节内容已读取\n");
fclose(file);
return 0;
}
技术细节剖析
1. 与 fseek 的微妙区别
操作 | 功能 | 是否清除错误标志 |
fseek(file, 0, SEEK_SET) | 回到文件起点 | 保留错误标志 |
rewind(file) | 回到起点 + 清除错误标志 | 彻底重置 |
2. 二进制/文本模式的影响
- 文本模式下,rewind 会忽略换行符转换问题,直接回到真实起点:
// Windows系统下,文件中的 "\r\n" 会被转换为 "\n"
rewind(file); // 依然定位到物理字节0的位置
3. 隐藏的副作用
- 如果文件以追加模式("a")打开:
FILE *file = fopen("log.txt", "a");
rewind(file); // 游标回到起点
fprintf(file, "Hi"); // 但写入时仍会自动跳到末尾!
致命误区
1. 对未打开的文件使用
FILE *file = NULL;
rewind(file); // 程序崩溃!
2. 忽略错误处理
// 即使 rewind 清除了错误,仍需检查后续操作
rewind(file);
if (fread(...) == 0) { // 文件可能为空
printf("文件内容为空\n");
}
高级技巧:快速清空文件
// 打开文件后立即 rewind + truncate
FILE *file = fopen("temp.txt", "r+"); // 读写模式
rewind(file); // 回到起点
ftruncate(fileno(file), 0); // 清空文件(UNIX系统)
对比 freopen
操作 | 功能 | 资源消耗 |
rewind | 重置已有文件指针 | 低 |
freopen | 关闭并重新打开文件 | 高 |
总结
- 核心功能:重置文件指针到起点 + 清除错误标志
- 必用场景:重复读取文件、错误恢复、日志轮转
- 类比记忆:就像录音机的「倒带并重置」按钮,rewind 是让文件操作重新开始的「时光重置器」