🕺作者:迷茫的启明星
🎃相关文章:☞☞☞【从0到1之C语言FILE】(后来写的可以相互补充)
🏇分享喜欢的一句话:心如花木,向阳而生
目录
一,前言
二,基础知识
FILE结构
FILE文件操作
一,操作文件
1.fopen函数
打开文件的方式:
2.fclose函数
二,读写文件
1.fgets函数
2.fputs函数
3.fread函数
4.fwrite函数
5.fprintf函数
6.fscanf函数
一,前言
孔子曰:“学而不思则惘,思而不学则殆。”现将所了解的C语言FILE相关操作·知识汇总如下,请多多指教!
二,基础知识
FILE结构
struct _iobuf {
char *_ptr; // 文件输入的下一个位置
int _cnt; // 当前缓冲区位置
char *_base; // 文件起始位置
int _flag; // 文件标志
int _file; // 文件有效性验证
int _charbuf; // 当前缓冲区状况
int _bufsiz; // 缓冲区大小
char *_tmpfname; // 临时文件名
};
typedef struct _iobuf FILE; //别名FILE,可以直接用
FILE文件操作
一,操作文件
1.fopen函数
打开数据文件
fopen(_In_z_ char const* _FileName,_In_z_ char const* _Mode);
即fopen(需要打开文件的文件名,打开文件的方式)
需要打开文件的文件名:
需要和exe文件在同一目录下,或者写出相对路径或绝对路径
打开文件的方式:
1.“r” 以"读"的方式打开一个文本文件(只能读)。
2.“r+” 在"r"的基础下增加了"写"。
3.“rb” 以"读"的方式打开一个二进制文件(只能读)。
4.“rb+” 在"rb"的基础下增加了"写"。
5.“w” 以"写"的方式创建一个文本文件,
如果这个文件已经存在,就会覆盖原来的文件。
6.“w+” 在"w"的基础下增加了"读"。
7.“wb” 以"写"的方式创建一个二进制文件。
8.“wb+” 在"wb"的基础下增加了"读"。
9.“a” 以"尾部追加"的方式打开一个文本文件(只能写)。
10.“a+” 在"a"的基础下增加了"读"。
11.“ab” 以"尾部追加"的方式打开一个二进制文件(只能写)。
12.“ab+” 在"ab"的基础下增加了"读"。
2.fclose函数
在文件操作完成后需将文件关闭
fclose(_Inout_ FILE* _Stream);
即fclose(文件名)
二,读写文件
1.fgets函数
按规则读取文件
// 成功返回缓冲区指针,失败返回 NULL。
fgets(
_Out_writes_z_(_MaxCount) char* _Buffer,
//接收文件内容的缓冲区指针
_In_ int _MaxCount,
//读取的字节数
_Inout_ FILE* _Stream
//文件对象指针
);
示例:
拓展:可以以多少字节为一行读取
FILE* f = fopen("Hello.txt", "r");
char buf[2048];
while (fgets(buf, 2, f)) {
//buf[2048]即每行不超过2048个字节,2表示每次只读2个字节,f为文件指针
cout << buf << endl;
}
2.fputs函数
将字符串写入文件
// 成功返回非负值,失败返回 EOF(-1)
fputs(
_In_z_ char const* _Buffer,// 要写入的字符串
_Inout_ FILE* _Stream // 指向 FILE 对象的指针
);
示例:
FILE* f = fopen("Hello.txt", "r+");
fputs("what do you mean?",f);
3.fread函数
fread(
_Out_writes_bytes_(_ElementSize * _ElementCount) void* _Buffer,
//读取的数据存放的内存的指针
_In_ size_t _ElementSize,
//每次读取的字节数
_In_ size_t _ElementCount,
//读取次数
_Inout_ FILE* _Stream
//要读取的文件的指针
);
4.fwrite函数
fwrite(
_In_reads_bytes_(_ElementSize * _ElementCount) void const* _Buffer,
//要输出数据的地址
_In_ size_t _ElementSize,
//每次写入的字节数
_In_ size_t _ElementCount,
//写入次数
_Inout_ FILE* _Stream
//目标文件指针
);
示例: 文章来源:https://www.toymoban.com/news/detail-444604.html
typedef struct book {
char name[20];
char author[20];
};
int main(){
book a;
FILE* f;
f = fopen("Hello.txt", "a");
fread(&a,sizeof(struct book), 1, f);
cin >> a.name >> a.author;
fwrite(&a, sizeof(struct book), 1, f);
fclose(f);
}
5.fprintf函数
fprintf(
_Inout_ FILE* const _Stream,
//文件指针
_In_z_ _Printf_format_string_ char const* const _Format,
//要写入的字符串
...)
6.fscanf函数
fscanf(
_Inout_ FILE* const _Stream,
//文件指针
_In_z_ _Scanf_format_string_ char const* const _Format,
//读取字符串
...)
示例:通过fprint,fscanf写书的入馆信息文章来源地址https://www.toymoban.com/news/detail-444604.html
//fprintf() 成功返回写入的字符的个数,失败则返回负数。
//fscanf() 返回参数列表中被成功赋值的参数个数。
#define _CRT_SECURE_NO_DEPRECATE
//不声明可能会报错,无碍
#include<stdio.h>
#include <stdlib.h>
#define N 2
struct book{
char name[10];
int num;
int year;
} booka[N], bookb[N], *pa, *pb;
int main(){
FILE *fp;
int i;
pa=booka;
pb=bookb;
if( (fp=fopen("D:\\Hello.txt","wt+")) == NULL ){
puts("Fail to open file!");
exit(0);
}
//从键盘读入数据,保存到booka
printf("输入数据:书名,数量,入馆年份:\n");
for(i=0; i<N; i++,pa++){
scanf("%s %d %d", pa->name, &pa->num, &pa->year);
}
pa = booka;
//将booka中的数据写入到文件
for(i=0; i<N; i++,pa++){
fprintf(fp,"%s %d %d\n", pa->name, pa->num, pa->year);
}
//重置文件指针
rewind(fp);
//从文件中读取数据,保存到bookb
for(i=0; i<N; i++,pb++){
fscanf(fp, "%s %d %d\n", pb->name, &pb->num, &pb->year);
}
pb=bookb;
//将bookb中的数据输出到显示器
for(i=0; i<N; i++,pb++){
printf("%s %d %d\n", pb->name, pb->num, pb->year);
}
fclose(fp);
return 0;
}
到了这里,关于C语言FILE详解(COME ON)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!