当前位置:网站首页>C语言文件读、写、定位函数
C语言文件读、写、定位函数
2022-07-31 05:09:00 【xjhdsg】
文章目录
文件函数

文件的读
fgetc(读一个字符)
// 函数原型
int fgetc(
FILE *stream //指向文件结构的指针
);
- fgetc 返回作为 int 读取的字符,或返回 EOF 以指示错误或文件尾。
- 这个函数读取完会将文件指针移动到下一个字符。
while(EOF != (ch = fgetc(fp))){
//可读取文件全部字符
printf("%c",ch); //若输出出现乱码,可调整文件编码为ANSI
}
fgets(读一行字符串)
// 函数原型
char *fgets(
char *str, //数据的存储位置。
int numChars, //要读取的最大字符数。
FILE *stream //指向 FILE 结构的指针
);
函数被调用时,最多读取n-1个字符,并将读入的字符串存入指针str所指向内存地址开始的n-1个连续的内存单元中。
当函数读取到字符串达到指定的个数、或接收到换行符、或接收到文件结束标志EOF时,将读取的字符后面自动添加’\0’字符,若有换行符,则将换行符保留(换行符在’\0’字符之前)。若有EOF,则不保留EOF。
执行成功,函数会将读到的字符串自动返回 str。执行失败,则返回 NULL 指示错误或文件尾条件。
函数读取完会将文件指针移动到字符串的下一个字符。
char str[100];
while(fgets(str,100,fp) != NULL){
//可读取文件全部内容
printf("%s",str);
}
fread(读指定字节数的字符串)
//函数原型
size_t fread(
void *buffer, //数据的存储位置。
size_t size, //项目大小(以字节为单位),即每次读多少个字节。
size_t count, //要读取的项目的最大数量,即读多少次。
FILE *stream //指向 FILE 结构的指针。
);
fread 返回实际读取的完整项数,在达到 buffer * size 前如果发生错误或遇到文结件尾,该数字可能小于 buffer * size,若读完则返回0。
// 读取文件全部内容。
char str[100] = {
0};
while(fread(str,1,99,fp)){
printf("%s",str);
}
文件的写
以w、w+打开文件时,文件会清空。
fputc(写入一个字符)
//函数原型
int fputc(
int c, //要写入的字符。
FILE *stream //指向文件结构的指针。
);
函数会返回写入的字符。fputc,返回值 EOF 表示错误。
fputs(写入一个字符串)
//函数原型
int fputs(
const char *str, //输出字符串。
FILE *stream //指向 FILE 结构的指针。
);
如果成功,函数将返回一个非负值。发生错误时,fputs将返回EOF。
char*str = "abcdefghijklmnopqrstuvwxyz";
fputs(str,fp);
fwrite(指定字节数写入)
//函数原型
size_t fwrite(
const void *buffer, //指向要写入的数据的指针。
size_t size,
size_t count,
FILE *stream
);
fread 返回实际写入的完整项数,在达到 buffer * size 前如果发生错误或遇到文结件尾,该数字可能小于 buffer * size。
//写入数字
int num = 12345;
fwrite(&num,1,sizeof(num),fp);
//写入结构体
struct student{
int num;
char name[];
int grade;
};
struct student a = {
1,"xjh",100};
fwrite(&a,1,sizeof(a),fp);
文件的定位
rewind(fp)
将文件指针重置到文件的开头
ftell(fp)
返回当前位置
fseek
//函数原型
int fseek(
FILE *stream, //指向 FILE 结构的指针。
long offset, //从origin开始,往后的字节数。
int origin //初始位置。
);
如果成功,则 fseek 返回 0。 否则,返回一个非零值。
origin的值只能为
| 原始值 | 含义 |
|---|---|
| SEEK_CUR | 文件指针的当前位置。 |
| SEEK_END | 文件结尾。 |
| SEEK_SET | 文件开头。 |
fseek(fp,-10,SEEK_CUR); //将指针定位到当前位置向前10个字节的位置
fseek(fp,5,SEEK_SET); //将指针定位到文件开头向后5个字节的位置
fseek(fp,-10,SEEK_END); //将指针定位到文件末尾向前10个字节的位置
// 实现输出最后一行
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE*fp = fopen("C:\\Users\\1\\OneDrive\\桌面\\z.txt","r+");
if(fp == NULL){
printf("打开文件失败.\n");
}
int Length = -1;
char Find;
fseek(fp,Length,SEEK_END);
while(fread(&Find,1,1,fp)){
if(Find == '\n'){
break;
}
Length--;
fseek(fp,Length,SEEK_END);
}
jiLu++;
fseek(fp,jiLu,SEEK_END);
char str[100] = {
0};
fgets(str,99,fp);
printf("%s",str);
fclose(fp);
system("pause");
return 0;
}
边栏推荐
- SQL statement to range query time field
- Kubernetes加入集群的TOKEN值过期
- <urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍
- The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
- Unity mobile game performance optimization series: performance tuning for the CPU side
- C语言实验一 熟悉C程序的环境
- 12 reasons for MySQL slow query
- 剑指offer基础版 ---- 第27天
- Tapdata 与 Apache Doris 完成兼容性互认证,共建新一代数据架构
- Kubernetes 证书可用年限修改
猜你喜欢
随机推荐
质量小议12 -- 以测代评
ES source code API call link source code analysis
.NET-6.WinForm2.NanUI learning and summary
Tapdata 与 Apache Doris 完成兼容性互认证,共建新一代数据架构
What are the advantages and disadvantages of Unity shader forge and the built-in shader graph?
DVWA shooting range environment construction
剑指offer基础版 ----- 第28天
数据库上机实验1 数据库定义语言
torch.normal function usage
110 MySQL interview questions and answers (continuously updated)
Flask-based three-party login process
Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
wx.miniProgram.navigateTo在web-view中跳回小程序并传参
Three handshakes and four waves
Temporal线上部署
MySQL8.0.26安装配置教程(windows 64位)
Workflow番外篇
Sword Point Offer Special Assault Edition ---- Day 1
C语言实验一 熟悉C程序的环境
剑指offer基础版 ----第31天









