目录
C语言 文件读写操作
最近在写c语言课设,接触到很多新知识,所有在此记录自己的所得。
就不扯那么多底层的东西了,直接上相关知识
文件打开模式
打开模式 | 说明(只读=就是只能读取,只写=就是只能写入) |
---|---|
w | 以 只写 的方式打开,并清空文件数据,若文件不存在则 新建文件 |
r | 以 只读 的方式打开,若文件不存在,则文件打开失败 |
a | 以 只写/追加 的方式打开,若文件不存在,则文件打开失败 |
w+ | 以 读写 的方式打开,并清空文件数据,若文件不存在则新建文件 |
r+ | 以 读写 的方式打开,若文件不存在,则文件打开失败 |
a+ | 以 读写/追加 的方式打开,若文件不存在,则文件打开失败 |
打开二进制的,打开模式,同上,后面加个b:wb, rb , ab , wb + 。。。
文件操作函数
fopen()——打开文件
原型:FILE* fopen(char const* _FileName , char const* _Mode );
- fopen打开失败的原因:1,路径错误 。 2,文件不存在 。
形参 | 说明 |
---|---|
char const* _FileName | 文件的路径 |
char const* _Mode | 文件打开模式 |
返回值 | 说明 |
---|---|
FILE* | 文件指针 |
NULL | 文件打开失败 |
fclose()——关闭文件流
原型:int fclose( FILE* _Stream );
- 通常在文件操作完成后,使用fclose()来关闭文件流
- 文件光标指针返回第一行。
形参 | 说明 |
---|---|
FILE* _Stream | 已经打开的文件指针 |
fputs()——写入字符串
原型:int fputs( char const* _Buffer, FILE* _Stream );
- 如果你之前fopen打开的文件模式,不是只写,或者读写,编译器会报错
- 写入成功返回0 ,失败返回非零的值。
形参 | 说明 |
---|---|
char const* _Buffer | 传入一个自定义的字符数组,或指针 |
FILE* _Stream | 已经打开的文件指针 |
fgets()——获取文件内容
原型:char* fgets( char* _Buffer, int _MaxCount, FILE* _Stream);
- 要确保buffer数组的长度为1024,MaxCount也为1024.
- 函数第n次运行后,文件光标指针自动移到n+1行,下一次使用fgets,将在第n+1行读取数据
例如:没有使用fgets前,光标指针位置
使用fgets后,光标指针位置
形参 | 说明 |
---|---|
char* _Buffer | 传入一个自定义的字符数组,或指针 |
int _MaxCount | 最大字符数(1024) |
FILE* _Streamt | 已经打开的文件指针 |
fscanf ()——格式化获取文件内容
原型:int fscanf ( FILE *fp, char * format, … );
- 跟 scanf 读取格式化的操作基本一样。
- 读取文件成功:返回参数列表中被成功赋值的参数个数。
形参 | 说明 |
---|---|
char * format | 传入格式化操作符:%d,%s,%f 之类的 |
FILE* _Streamt | 已经打开的文件指针 |
fprintf ()——格式化写入字符串
原型:int fprintf ( FILE *fp, char * format, … );
- 跟 printf 输出格式化的操作基本一样。
- 写入成功:返回成功写入的字符的个数,失败则返回负数。
形参 | 说明 |
---|---|
char * format | 传入格式化操作符:%d,%s,%f 之类的 |
FILE* _Streamt | 已经打开的文件指针 |
打开文件实例
我们用vs2017打开新建一个文件
//输入以下代码
#include <stdio.h>
int main() {
//1.创建文件结构指针
//2.传入test.txt这个相对路径下的文件
//3.使用w操作符新建文件
FILE *filepointer = fopen("test.txt","w");
if (filepointer==NULL) {
printf("文件打开失败");
}
else {
printf("文件打开成功");
}
return 0;
}
然后点击运行工具栏的本地windows调速器运行代码,
会出现下图:
这里我们要注意了,vs2017对一些函数进行了修改,像fopen,printf,scanf函数都被弃用。
解决方法——点击链接:https://blog.csdn.net/qq_31254489/article/details/105548474
解决函数不安全的问题后,得到结果:
读写文件实例
#include <stdio.h>
int main() {
FILE *filepointer = fopen("test.txt","w+");
if (filepointer==NULL) {
printf("文件打开失败");
}
else {
printf("文件打开成功\n");
//fputs向文件写入字符串
fputs("fputs测试\n",filepointer);
//fprintf向文件写入字符串
fprintf(filepointer, "fprintf测试(无参数)\n");
fprintf(filepointer, "fprintf测试(有参数):%d,%s \n",1,"参数2");
}
//关闭文件
fclose(filepointer);
//以读写的方式打开文件
filepointer = fopen("test.txt","r+");
//创建缓冲区
char buf[1024];
//fget读取文件字符串,并将光标移到下一行
fgets(buf, 1024, filepointer);
printf("fputs输出:%s", buf);
//fscanf读取文件字符串,并将光标移到下一行
fscanf(filepointer,"%s", buf);
printf("fscanf输出:%s\n", buf);
fscanf(filepointer, "%s", buf);
printf("fscanf输出:%s", buf);
return 0;
}
运行得到结果:
使用fsancf要注意回车符"\n"的处理。