赞
踩
文件 = 文件内容 + 文件属性
在程序设计中,文件分为程序文件和数据文件。
程序文件包含:源文件(
.c
文件)、目标文件(windows操作系统.obj
文件)、可执行文件(windows操作系统.exe
文件)
该文件的内容不一定是程序,而是程序运行时读取的数据。
总所周知,内存是具有掉电易失的特性,因此我们需要文件把数据存储起来,因为文件是存储到我们的外设磁盘上,磁盘对数据进行保存具有持久化。
【文件特性】
在C语言中,进行文件操作时,编译器会自动生成一个文件结构,存放文件的信息。文件结构体会有一个文件指针FILE*
,指向该结构。
文件打开需要一个函数FILE* fopen(const char* str,const char* mode)
,该函数会返回一个文件指针。
注意:对文件进行写入数据,是输出操作,对文件进行读取操作,是输入操作
【输出操作解析】
就是将数据从内存中数据输出到文件。
【输入操作解析】
就是将文件中的数据输入到内存中。
【函数参数】
返回类型 FILE
, 失败返回空指针 NULL
参数1 文件名或者文件路径
参数2 文件的操作模式
【文件的操作模式】
操作模式 | 含义 | 具体操作 | 指定文件不存在 |
---|---|---|---|
“r” | 只读 | 打开文本文件,进行数据输入 | 出错 |
“w” | 只写 | 打开文本文件,进行数据输出 | 创建新文件 |
“rb” | 只读 | 打开二进制文件,进行数据输入 | 出错 |
“wb” | 只写 | 打开二进制文件,进行数据输出 | 创建新文件 |
“a” | 追加 | 打开文本文件,在文件尾部进行数据追加 | 创建新文件 |
“ab” | 追加 | 打开二进制文件,在文件尾部进行追加 | 出错 |
“r+” | 读写 | 打开文本文件,进行读和写 | 出错 |
“w+” | 读写 | 打开文本文件,进行读和写 | 创建新文件 |
“a+” | 追加 | 打开文本文件,在文件尾部读写 | 创建新文件 |
“rb+” | 读写 | 为了读和写,打开二进制文件 | 出错 |
“wb+” | 读写 | 为了读和写,打开二进制文件 | 创建新文件 |
“ab+” | 读写 | 打开二进制文件,在文件尾部进行读和写 | 创建新文件 |
文件也是数据,所以我们在打开文件的同时应该也要进行对应的关闭文件
【关闭文件函数】
int fcolse(EILE* stream)
【函数参数】
实例代码
#include <stdio.h>
int main()
{
FILE* pf = fopen("test.txt","w"); //以写的方式进行操作test.txt文件
if(pf == NULL) //返回空指针说明文件打开失败
{
perror("fopen");
return 1;
}
/*进行相关操作*/
fclose(pf); /*关闭文件*/
return 0;
}
在C语言中,有许多函数接口可以对文件进行操作。接下来,我们一起来学习。
【文件读写函数接口】
函数名 | 功能 | 适用于 |
---|---|---|
fgetc | 对字符进行输入 | 所有输入流 |
fputc | 对字符进行输出 | 所有输出流 |
fgets | 对文本行进行输入 | 所有输入流 |
fputs | 对文本行进行输出 | 所有输出流 |
fscanf | 对格式化数据进行输入 | 所有输入流 |
fprintf | 对格式化数据进行输输出 | 所有输出流 |
fread | 对二进制文件进行输入 | 文件 |
fwrite | 对二进制文件进行输出 | 文件 |
【fgetc / fputc】
fputc : 对单个字符进行输出,(可循环使用输出单个字符)
int main()
{
FILE* pf = fopen("test.txt","w"); /* w */
if (pf == NULL)
{
perror("fopen");
return 1;
}
fputc('A',pf); /* 将字符A输出到文件中 */
fclose(pf);
return 0;
}
执行代码后,打开文件目录下文件test.txt,会发现字符A已经写入进去了。
fgetc:对单个字符进行输入
int main() { FILE* pf = fopen("test.txt", "r"); // r if (pf == NULL) { perror("fopen"); return 1; } char c = fgetc(pf); /*将文件中字符A输入到内存中,进行获取赋值给变量c*/ printf("%c ",c); fclose(pf); return 0; }
执行代码会在显示屏上打印字符A
【fgets / fputs】
fputs:对文本行进行输出操作
int main()
{
FILE* pf = fopen("test.txt", "w"); // w
if (pf == NULL)
{
perror("fopen");
return 1;
}
fputs("hello world\n",pf); /*将字符串 hello world 输出到文件中*/
fclose(pf);
return 0;
}
执行代码后,打开文件目录下文件test.txt,会发现字符串 hello word 已经输出到文件中
fgets:对文本行进行都输入操作
int main() { FILE* pf = fopen("test.txt", "r"); // r if (pf == NULL) { perror("fopen"); return 1; } char str[20]; fgets(str, sizeof(str), pf); /* 将文件中的字符串 hello world 输入到字符数组中*/ printf("%s \n",str); fclose(pf); return 0; }
执行代码会在显示屏上打印字符串 hello world
【fscanf / fprintf】
fprintf: 对数据进行格式化输出
int main() { char str[20] = "helloworld!!!"; int num = 10000; float f = 3.1415926; FILE* pf = fopen("test.txt", "w"); // w if (pf == NULL) { perror("fopen"); return 1; } fprintf(pf,"%s %d %f",str,num,f); /* 将str num f 的数据输出到文件中*/ fclose(pf); return 0; }
执行代码后,打开文件目录下文件test.txt,会发现变量的数据str num f已经输出到文件中
fscanf:对数据格式化输入
遇到空格和换行会停止读取
struct newtemp { char charr[20]; int i; float f; }; int main() { struct newtemp temp = { 0 }; FILE* pf = fopen("test.txt", "r"); // r if (pf == NULL) { perror("fopen"); return 1; } size_t o = fscanf(pf,"%s %d %f",temp.charr,&(temp.i),&(temp.f)); printf("%s %f %d",temp.charr,temp.f,temp.i); fclose(pf); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。