C语言的文件操作算是C语言的精髓,也是非常难的一个点。下面让我们来了解一下C语言是怎么进行文件操作的。
目录
1、如何优雅的打开和关闭文件
我们写程序时候很多时候需要数据的保存,以便下一次启动程序时候直接调用。那我我们先来看看如何保存数据吧。
(1)数据的调用
我们是用一个文件来保存数据,那我我们首先是需要调用这个文件。C语言中我们是用一种叫做FILE的结构体来调用文件的。我们可以创建一个叫做FILE*的指针来表示文件操作。还有两个操作分别是fopen打开文件,fclose关闭文件,如下面演示:
FILE* pf = fopen("demo.txt","wb");
fopen的用法就是参数里面两个字符串,第一个字符串里面写文件名,没有路径的话默认就是当前路径下面,当然也可以写绝对路径。第二个参数是操作类型,常用的包括 "r" 读取,"w" 写入, "rb" 二进制读取,"wb"二进制写入。fopen的返回类型就是一个FILE*的指针以便我们调用。如果打开成功就返回文件指针,如果打开失败就会返回空指针,因此我们在使用前要检验指针有效性。
(2)数据的保存
我们对数据的保存可以是读写文件之后关闭文件即可,在我们读写完成之后只需要使用fclose函数来操作。
fclose(pf);
fclose参数就是我们创建的文件指针,返回值是int类型,如果关闭成功就返回0,如果关闭失败就会返回EOF。
2、输入输出函数
输入输出函数是我们保存或读取数据的常用操作下面我们分别介绍他们
(1)输入函数
1、getc
它的作用是从一个流里读取一个字符。
int getc(FILE *stream);
比如我们可以测试从标准输入流读取stdin,就可以从键盘上读取一个字符。
2、gets
char *gets(char *str);
它的作用是从标准输入流读取一个字符串,并存放在str指向的字符串中。
(2)输出函数
1,putc
它的作用是把一个字符推送进一个流里。
int putc(int char, FILE *stream);
参数char就是我们要推送的字符,参数二就是我们要推送进的流,可以是某个文件,如果是想测试可以用stdout来测试,这个是标准输出流,就是把字符打印到屏幕上。
2、puts
它的作用是把一个字符串推送到标准输出流里,直到空字符,但不含空字符,推进完后还会自动追加一个换行。
int main()
{
char arr[20] = "abc\nef";
puts(arr);
return 0;
}
这段代码跑出来的结果是下面这样的
还有常用的输入输出函数例如printf,scanf。这些输入输出函数还可以加前缀,加一个f代表可以选择输入输出的流,加s表示选择输入输出到一个字符串中。
3、对文件数据的输入输出
我们对文件数据的保存可以保存成文本文件也可以保存成二进制文件,读取时候当然也可以以文本文件读取或者是以二进制形式读取。具体怎么存储节省内存是不一定的,如果存一个1,以字符形式存储就是一个字节,但是以整型存储就是4个字节。但是如果是1000000,以字符存储就是7个字节,以整型存储就是4个字节,这个要自己斟酌使用,二进制读写时候要在fopen第二个参数后加上b表示二进制格式。