将写的程序写入到文件当中,将文件中的代码导入到软件当中,内存和磁盘中的文件进行交互。

文件和流的介绍
文件最主要的作用就是 保存数据 ,它既可以保存一张图片,也可以保持视频,声音...。
C程序中,对于文件中数据的输入/输出操作以“ 流(stream) ” 的方式进行,可以看做是一种数据的流动。

输入流:从数据源(比如:文件)到程序(或内存)的流动过程;
输出流:从程序(或内存)到数据源(比如:文件)的流动过程。
C输入和输出
输入的来源:键盘。文件,或从网络中。
输出的目的地:屏幕上,打印机上或任意文件中显示或保存一些数据。
- 标准的文件I/O
| 标准文件 | 文件指针 | 设备 |
| 标准输入 |
stdin
| 键盘 |
| 标准输出 |
stdout
| 屏幕 |
| 标准错误 |
stdout
| 屏幕 |
scanf和printf函数 、getchar和putchar函数 、gets和puts函数 在发布的第二篇C语言文章关于变量的文件中详细说到。
C文件的读写
首先声明文件路径:
举例:char * filePath = "C:\\Users\\86182\\Desktop\\hello.txt";
-
创建/打开文件
FILE * fopen( const char * filename e , const char * mode);
filename是字符串,用来命名文件;访问模式 mode 的值可以是下列值中的一个。
| 模式 | 描述 |
| r |
只读 。打开一个已有的文本文件,只允许读取。
|
| w |
只写 。打开一个文本文件,只允许写入文件。如果文件 不存在,则会创建一个新文件,
并从文件的开头写入内容。如果文件存在,则截断文件为 零长度,从开始写入!
|
| a |
追加 。打开一个文本文件,用于写入。如果文件不存 在,则创建一个新文件。
如果文件已存在,则将写入的数据追加到文件末尾。
|
| rb |
只读(二进制) 。打开一个二进制文件,只允许读取
|
| wb |
只写(二进制) 。打开一个二进制文件,只允许写入。 如果文件不存在,则创建一个
新文件。如果文件已存在,则截断文件为零长度,从开始写入!
|
| ab |
追加(二进制) 。打开一个二进制文件,用于写入。如果文件不存在,则创建一个新文件。如果文件已存在,则将写入的数据追加到文件末尾。
|
| 模式 | 描述 |
| r+ |
读写 。打开一个文本文件,允许读取和写入。
|
| w+ |
读写 。打开一个文本文件,允许读取和写入。如果文件不存在,则创建一个新文件。
如果文件已存在,则截断文件为零长度,从开始写入!
|
| a+ |
读写 。打开一个文本文件,允许读取和写入。如果文件不存在,则创建一个新文件。
如果文件已存在,则将写入的数据追加到文件末尾。
|
| rb+ |
或 "rb+": 读写(二进制) 。打开一个二进制文件,允许读取和写入。
|
| wb+ |
或 "wb+": 读写(二进制) 。打开一个二进制文件,允许读取和写入。如果文件
不存在,则创建一个新文件。如果文件已存在,则截断文件为零长度。
|
| ab+ |
或 "ab+": 读写(二进制) 。打开一个二进制文件,允许读取和写入。如果文件
不存在,则创建一个新文件。如果文件已存在,则将写入的数据追加到文件末尾。
|
-
关闭文件
int fclose( FILE *fp );
说明:
- 如果成功关闭文件,fclose( ) 函数返回零。此时,会 清空缓冲区中的数据 ,关闭文件,并释放用于该文件的所有内存。
- 如果关闭文件时发生错误,函数返回 EOF。EOF 是一个定义在头文件 stdio.h 中的常量。
-
写入文件
方式1:fprintf函数
int fprintf(FILE *fp,const char * format, ...);
方式2:fputs函数
int fputs( const char *s , FILE *fp );
举例:
#include <stdio.h>
int main() {
//创建一个文件指针
FILE *fp = NULL;
//打开该文件
fp = fopen("d:/hello.txt", "w+"); //w+模式是:如果文件已存在,则截断文件为零长度。
//fp = fopen("d:/hello.txt", "a+");
//a+模式是:如果文件已存在,则将写入的数据追加到文件末尾。
//将内容写入到文件中
fputs("你好,北京!!\n", fp);
fprintf(fp, "你好,世界!!\n");
//关闭文件!如果不关闭 ,我们的内容没有保存到文件中!
fclose(fp);
printf("创建,写入信息完成");
return 0;
}
-
读取文件
其中声明文件路径、打开文件、关闭文件的操作和上面相同。因此这里只讲读取文件的方式。
方式1:fscanf函数
int fscanf (FILE *fp , const char *format, ... );
这种方式更适合:使用 fscanf() 函数从文件中读取格式化的数据,比如 整数、浮点数等各种类型的数据 。 format 参数指定了数据的格式,后面的参数是用于存储读取数据的变量。
注意:
- 如果使用 fscanf( ) 函数从文件中 读取字符串 ,会在遇到第一个空白字符(空格、制表符、换行符等)时,停止读取,之后的内容会被忽略。
- 它会返回 成功读取的参数个数 。或者在读取失败或文件结束时 返回 EOF 。
- 因此,这种方式不太适合对于字符串文本的读取。
方式2:fgets函数
先声明一个字符数组作为缓冲区:char* cBuff [10];
char * fgets( char *buf , int n , FILE *fp );
说明:
- 此函数按行读取数据,它从文件中 读取一行数据 (包括换行符'\n'),并将这一行的内容存储到指定的缓冲区中。参数中 buf 是用于存储读取的文本的缓冲区,n 是缓冲区的大小,fp 是文件指针。
- 如果成功读取,返回参数 buf,即读取到的字符串的首地址。如果到达文件末尾或者读取失败,返回NULL。
举例:
#include <stdio.h>
int main() {
//创建一个文件指针
FILE *fp = NULL;
//定义一个缓冲区
char buff[1024];
//打开文件
fp = fopen("d:/hell.txt", "r");
//方法1
//fscanf(fp, "%s", buff);
//输出
//printf("%s\n", buff); //这种输出遇到‘\0’,就会停止输出。
//方法2 读取整个文件
//说明,循环读取fp指向的文件内容,如果读到NULL,就结束
while (fgets(buff, 1024, fp) != NULL) {
printf("%s", buff);
}
//关闭文件
fclose(fp);
return 0;
}
3823

被折叠的 条评论
为什么被折叠?



