文章目录
文件函数(文本文件)
文件的读
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;
}