目录
C语言 文件读写操作
最近在写c语言课设,接触到很多新知识,所有在此记录自己的所得。
就不扯那么多底层的东西了,直接上相关知识
文件打开模式
打开模式 | 说明(只读=就是只能读取,只写=就是只能写入) |
---|---|
w | 以 只写 的方式打开,并清空文件,若文件不存在则 新建文件 |
r | 以 只读 的方式打开,若文件不存在,则文件打开失败 |
a | 以 只写/追加 的方式打开,若文件不存在,则文件打开失败 |
w+ | 以 读写 的方式打开,并清空文件,若文件不存在则新建文件 |
r+ | 以 读写 的方式打开,若文件不存在,则文件打开失败 |
a+ | 以 读写/追加 的方式打开,若文件不存在,则文件打开失败 |
打开二进制的,打开模式,同上,后面加个b:wb, rb , ab , wb + 。。。
文件操作函数
fopen()——打开文件
原型:
FILE* __cdecl fopen(char const* _FileName , char const* _Mode );
形参 | 说明 |
---|---|
char const* _FileName | 文件的路径 |
char const* _Mode | 文件打开模式 |
返回值 | 说明 |
---|---|
FILE* | 文件指针 |
NULL | 文件打开失败 |
fopen打开失败的原因:1,路径错误 。 2,文件不存在
fclose()——关闭文件流
原型:
int __cdecl fclose( FILE* _Stream );
通常在文件操作完成后,使用fclose()来关闭文件流
形参 | 说明 |
---|---|
FILE* _Stream | 已经打开的文件指针 |
fputs()——写入文件内容
原型:
int __cdecl fputs( char const* _Buffer, FILE* _Stream );
这里主要,如果你之前fopen打开的文件模式,不是只写,或者读写,编译器会报错
形参 | 说明 |
---|---|
char const* _Buffer | 传入一个自定义的字符数组,或指针 |
FILE* _Stream | 已经打开的文件指针 |
成功返回0 ,失败返回非零的值。
fgets()——获取文件内容
原型:
char* __cdecl fgets( char* _Buffer, int _MaxCount, FILE* _Stream);
形参 | 说明 |
---|---|
char* _Buffer | 传入一个自定义的字符数组,或指针 |
int _MaxCount | 最大字符数(1024) |
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("测试测试测试",filepointer);
}
//关闭文件
fclose(filepointer);
//以读写的方式打开文件
filepointer = fopen("test.txt","r+");
//创建缓冲区
char buf[1024];
//向文件读取字符串
fgets(buf, 1024, filepointer);
printf("%s", buf);
return 0;
}
运行得到结果: