将文件指针复位C语言,C语言学习笔记之 文件操作
文件操作
文件指针
操作系统通过 函数(API) 操作文件,而函数通过文件指针识别不同文件
函数 --> 文件指针 --> 文件
打开和关闭文件
fopen打开文件
#include
FILE *fopen(const char *filename,const char *mode);
功能:打开文件
参数:
filename:文件名
mode:打开文件的模式
返回值:
成功:文件指针
失败:NULL
mode的赋值:
r只读,w只写,b二进制文件,a追加,+可读可写
附:
FILE的定义:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
fclose关闭文件
#include
int fclose(FILE *stream);
功能:关闭fopen打开的文件,将缓冲区的数据写入文件中,
并释放系统提供的文件资源
参数:
stream:文件指针
返回:
成功:0
失败:-1
例:
#include
#include
int main() {
FILE *fp = NULL;
fp = fopen("./tes","rb");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
printf("打开成功\n");
fclose(fp);
return 0;
}
# 当test文件存在时
打开成功
# 当不存在时
fopen: No such file or directory
文件读写
fputc往文件写一个字符
#include
int fputc(int ch,FILE *stream);
功能:将ch转换为unsigned char后写入stream文件中
参数:
ch:字符
stream:文件指针
返回:
成功:成功写入文件的字符
失败:返回-1
例:
fgetc读取一个字符
#include
int fgetc(FILE *stream);
功能:从stream指定的文件里读取一个字符
参数:
stream:文件指针
返回:
成功:读取到的字符
失败:-1
判断文件结束
EOF 宏 -1 文本文件
feof 函数 文本文件和二进制文件
int feof(FILE *stream);
功能:检测是否读到了文件结尾。判断的是最后一次“读操作的
内容”,不是当前位置内容(上一个内容)
参数:
stream:文件指针
返回:
非0值:已经到文件结尾
0:未到文件结尾
例:
#include
#include
int main() {
FILE *fp = NULL;
fp = fopen("./hello.txt","r");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
// 操作文件
while (1) {
char ch = 0;
ch = fgetc(fp);
// 判断文件末尾
// EOF
// if (ch == EOF)
// {
//break;
// }
if (feof(fp)) {
break;
}
printf("%c",ch);
}
printf("\n");
fclose(fp);
return 0;
}
Hello file
实例1:二进制文件读取器
#include
#include
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("ERROR:参数过少。。。");
exit(1);
}
else if (argc > 2)
{
printf("ERROR:参数过多。。。");
exit(1);
}
else
{
FILE *fp = NULL;
fp = fopen(argv[1], "rb");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
while (1)
{
char ch = 0;
ch = fgetc(fp);
if (feof(fp))
{
printf("\n");
break;
}
printf("%-#x\t", ch);
}
}
return 0;
}
效果:
fputs写入字符串
int fputs(const char *str,FILE *stream);
功能:将str字符串写入stream文件中
参数:
str:字符串
stream:文件指针
返回:
成功:0
失败:-1
例:
#include
#include
int main() {
FILE *fp = NULL;
fp = fopen("./hello.txt","w");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
// 操作文件
char *buf[] = {"大漠孤烟直\n","长河落日园"};
for (size_t i = 0; i < sizeof(buf)/sizeof(buf[0]); ++i) {
fputs(buf[i],fp);
}
fclose(fp);
return 0;
}
# hello.txt
大漠孤烟直
长河落日园
fgets获取一行
#include
char *fgets(char *str,int size,FILE *stream);
功能:从stream文件中读取字符,写入str中,
直到出现换行符、文件结尾或已经读了size-1个字符为止,
最后会自动加上'\0'
参数:
str:字符串
size:最大读取字符串的长度
stream:文件指针
返回:
成功:字符串
读到文件尾或出错:NULL
例:四则运算解题神器
题目:
代码:
#include
#include
int main() {
FILE *fp = fopen("题目.txt","r");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
char buf[128] = "";
while (fgets(buf,sizeof(buf),fp))
{
int num1 = 0, num2 = 0;
char ch = 0;
// 解包
sscanf(buf, "%d%c%d=", &num1, &ch, &num2);
// 计算
int sum = 0;
switch (ch)
{
case '+':
sum = num1 + num2;
break;
case '-':
sum = num1 - num2;
break;
case '*':
sum = num1 * num2;
case '/':
sum = num1 / num2;
break;
}
printf("%d%c%d = %d\n",num1,ch,num2,sum);
}
if (fp != NULL)
{
fclose(fp);
fp = NULL;
}
return 0;
}
1+1 = 2
102+3424 = 3526
483989-334224 = 149765
2304*381 = 6
3424*31555 = 0
333333321/34243 = 9734
32543625/55423 = 587
文件高级操作
文件重命名和删除
文件的块读写
将内存中的数据原样输出在文件
fwrite
#include
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
功能:把 ptr 所指向的数组中的数据写入到stream 中
参数:
ptr:指向要被写入的元素数组的指针。
size:要被写入的每个元素的大小,以字节为单位。
nmemb:元素的个数,每个元素的大小为 size 字节
stream:文件指针
返回:
如果成功,该函数返回一个 size_t 对象,
表示元素的总数,该对象是一个整型数据类型。
如果该数字与 nmemb 参数不同,则会显示一个错误
#include
#include
typedef struct {
char name[16];
int age;
float score;
}stu;
int main() {
stu student[3] = {
{"小李",13,100},
{"小红",14,119},
{"小明",15,120}
};
FILE *fp = fopen("./student.txt","w");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
fwrite(student,sizeof(stu),3,fp);
fclose(fp);
return 0;
}
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从给定流 stream 读取数据到 ptr 所指向的数组中
参数:
ptr:指向带有最小尺寸 size*nmemb 字节的内存块的指针
size:要读取的每个元素的大小,以字节为单位
nmemb:元素的个数,每个元素的大小为 size 字节
stream:文件指针
返回:
成功读取的元素总数会以 size_t 对象返回,
size_t 对象是一个整型数据类型。
如果总数与 nmemb 参数不同,
则可能发生了一个错误或者到达了文件末尾
#include
#include
typedef struct {
char name[16];
int age;
float score;
}stu;
int main() {
stu student[3];
FILE *fp = fopen("./student.txt","r");
if (fp == NULL)
{
perror("fopen");
exit(1);
}
int n = fread(student,sizeof(stu),3,fp);
for (size_t i = 0; i < n; ++i)
{
printf("name = %s, age = %d, score = %.2f\n",student[i].name,student[i].age,student[i].score);
}
fclose(fp);
return 0;
}
name = 小李, age = 13, score = 100.00
name = 小红, age = 14, score = 119.00
name = 小明, age = 15, score = 120.00
格式化读写
fprintf
fscanf
复位流指针
设置文件流指针
成功:0;失败:-1
ftell返回文件流指针距离文件首部的偏移量(字节)
获取文件状态
缓冲区
标签:fp,文件,stream,int,笔记,C语言,include,size
来源: https://www.cnblogs.com/zhujiangyu/p/13765369.html
将文件指针复位C语言,C语言学习笔记之 文件操作相关推荐
- 《Go语言圣经》学习笔记 第六章 方法
<Go语言圣经>学习笔记 第六章 方法 目录 方法声明 基于指针对象的方法 通过嵌入结构体来扩展类型 方法值和方法表达式 示例:Bit数组 封装 注:学习<Go语言圣经>笔记, ...
- 《Go语言圣经》学习笔记 第五章函数
<Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...
- 《Go语言圣经》学习笔记 第四章 复合数据类型
<Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...
- 《Go语言圣经》学习笔记 第三章 基础数据类型
<Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...
- 《Go语言圣经》学习笔记 第七章 接口
<Go语言圣经>学习笔记 第七章 接口 目录 接口是合约 接口类型 实现接口的条件 flag.Value接口 接口值 sort.Interface接口 http.Handle接口 erro ...
- C语言基础入门学习笔记
前言 我是一个初中生,过完暑假就是一个高一的学生了.在这个暑假里,我学习了韦东山老师和唐佐林老师的课程,所以我写下这个笔记来记录自己的成长历程. C语言基础入门学习笔记 格式 #include < ...
- 数据结构(C语言版)学习笔记2-单链表
数据结构(C语言版)学习笔记2-单链表 1.单链表定义 typedef int ElemTypes; typedef struct node {ElemTypes data; //数据域struct ...
- 语言 提取列名_学习健明老师发布的R语言练习题的学习笔记(二)
学习者:骆栢维 题目来源:生信基石之R语言 中级10 个题目:http://www.bio-info-trainee.com/3750.html 备注:本文为笔者学习健明老师GitHub答案代码的学习 ...
- 《Go语言圣经》学习笔记 第十一章 测试
<Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...
最新文章
- html中运行php脚本,php脚本在html文件中
- python3.6.5安装教程-Centos7 安装Python3.6.
- CMake入门指南-编译教程
- Java8新特性 Optional类
- 吴杭民:上海的生活成本高过纽约(贪污腐败横行)
- python 判断div 之间的内容是否为空_python实现单向链表数据结构及其基本方法
- Playground
- Exynos4412 内核移植(七)—— 内核相关知识补充
- python实现批量图片/文件重命名
- 极光:2021年移动互联网母婴亲子行业研究报告
- JS String 对象 常用方法
- .net Core 学习笔记(实体字段映射,IOC注入)
- JS Navigator onLine 获取系统是否处于脱机模式
- 第12章 决策树 学习笔记下 决策树的学习曲线 模型复杂度曲线
- web服务器和app服务器
- NAS自回血方案介绍
- Useing rvm
- 热点综述 | 单细胞+空间转录组的整合分析方法总结
- 三极管(如NPN)集电极正偏 发射极反偏会怎么样呢? 电流会倒流吗? 其他三种都知道,就是不知道这种情况
- “聪明程序员”的自嘲