<C>文件操作

文件分为数据文件程序文件

数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

程序文件

包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。

根据数据的组织形式,数据文件被称为文本文件或者二进制文件
文本文件

要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件

二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到外存

C语言操作主要依靠文件指针中存放文件中的相关信息,C语言有系统声明的结构体FILE
通过文件指针,也可以称为文件句柄,通过文件指针能够访问与它关联的文件。
所以想操作文件,先要用文件句柄打开文件

FILE* fp = fopen ( const char * filename, const char * mode );

fp就是文件指针,用它来打开一个文件流。
filename就是要打开的文件名,文件名包括文件所在路径。
mode就是要打开文件的方式。

文件打开方式含义文件不存在时
"r"只读输入数据,打开一个已经存在的文本文件出错
"w"只写输出数据,打开一个文本文件创建新文件
“a”追加向文本文件尾添加数据出错
“rb”二进制读为了输入数据,打开一个二进制文件出错
“wb"二进制写为了输出数据,打开一个二进制文件创建新文件
“ab”二进制追加向一个二进制文件尾添加数据出错
“r+读写读和写,打开一个文本文件出错
“w+”写读读和写,打开一个文本文件创建新文件
“a+读写打开文件,在文件尾进行读写创建新文件
“rb+读写读和写,打开一个二进制文件出错
“wb+读写读和写,打开一个二进制文件创建新文件
“ab+读写打开二进制文件,在文件尾进行读和写创建新文件
#include<stdio.h>
int main()
{
	FILE* fp;
	fp = fopen("file.txt","r");
}

文件输入流操作

函数功能
fgetc()字符输入函数
fgets()文本行输入函数
fscanf ()格式化输入函数
fread()二进制输入

文件输出流操作

函数功能
fputc()字符输出函数
fputs()文本行输出函数
fprintf ()格式化输出函数
fwrite()二进制输出
#include<stdio.h>
int main()
{
	FILE* fp;
	char ch[1024];//用字符串接受读出的字符
	fp = fopen("file.txt","r");
	fgets(ch,sizeof(ch),fp);//读取一行
}

fgets每读取一行,文件指针会指向下一行。

#include<stdio.h>
int main()
{
	FILE* fp;
	fp = fopen("file.txt","r");
	fputs("put string in",fp);
}

fput在当前行写入字符串。
如果是以“a”模式打开,则从文本末尾开始写入字符串。

rewind()

文件指针指向回到文件起始位置。
void rewind(FILE* stream)

fseek()

根据文件指针的位置和偏移量来定位文件指针
int fseek(FILE* stream, long int offset, int origin )

第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.

#include <stdio.h>

int main()
{
    FILE* fp;
    char ch[1024];
    fp = fopen("test.txt","w+");
    fputs("I LOVE YOU.",fp);
    fseek(fp,10,SEEK_SET); //指针指向文件开始处第10个字节
    fputs(" Lily",fp); //插入新字符串
    fseek(fp,0,SEEK_SET); //此时将指针重写指向起始位置
    fgets(ch,sizeof(ch),fp); //结果为 I LOVE YOU Lily.
    printf("%s",ch);
}

文件结束

读取文件的末尾处有一个文件结束标识符 EOF代表当前文件的结束位置,文件读到EOF时,文件指针返回NULL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值