赞
踩
本篇用来记录学习,分享经验,有错误请多指正!
磁盘里的东西都是文件
分为程序文件、数据文件
程序文件包括源程序文件(.c)、目标文件(.obj)、可执行程序(.exe)
读写数据用的文件,例如文本文件(.txt)
为了方便我们操作不同的外部设备进行输入输出和各种操作,抽象出来的一个概念,可以把流想象成一条流淌字符的河
C语言启动时默认打开3个标准流:
stdin - 标准输入流,一般情况下,键盘输入(scanf就是从标准输入流读取数据
stdout - 标准输出流,一般情况下,屏幕输出(printf就是将数据输出到标准输出流
stderr - 标准错误流,输出错误信息到屏幕
stdin、stdout、stderr 三个流的类型是: FILE* ,通常称为⽂件指针。
C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。
指向文件首地址的指针(FILE*)
例如:
FILE* fp;
//定义了一个指针fp,这个指针指向一个文件
文件使用方法 | 含义 | 如果指定文件不存在 |
---|---|---|
r 只读 | 为了输⼊数据,打开⼀个已经存在的⽂本⽂件 | 出错 |
w 只写 | 为了输出数据,打开⼀个⽂本⽂件 | 建⽴⼀个新⽂件 |
a 追加 | 向⽂本⽂件尾添加数据 | 建立一个新文件 |
文件使用方法 | 含义 | 如果指定文件不存在 |
---|---|---|
+ 读写 | 为了读写打开一个文本文件 | 和其他方法组合使用 |
b 二进制 | 打开一个二进制文件 | 和其他方法组合使用 |
例:
文件使用方法 | 含义 | 如果指定文件不存在 |
---|---|---|
rb | 为了输入数据,打开一个二进制文件 | 出错 |
ab+ | 打开一个二进制文件,在末尾读写数据 | 建立一个新文件 |
读写前应该先打开文件,用完再关闭
ANSIC 规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );
直接写文件名默认实在当前目录下寻找,如果需要指定目录,写路径时需要用 \\ 双斜杠
例如:
FILE* fp = fopen("c:\\User\\test.txt","w");
函数名 | 格式 | 代码解释 | 功能 |
---|---|---|---|
fgetc | char c = fgetc(fp); | 从fp指向的文件中读取一个字符放到字符变量c里,如有循环,从前往后读取,每读取一次,光标向后移一位 | 从指定的文件读取一个字符 |
fputc | fputc(“A”,fp); | 把字符A存到fp指向的文件里,他会从前往后存(顺序写入),并且覆盖原有数据 | 写入一个字符到指定的文件 |
fgets | fgets(str,n,fp); | 从fp指向文件读取长度为n-1(给\0留一位)的字符串,存入str数组 | 从指定的文件读取一个字符串 |
fputs | fputs(str,fp); | 把fp指向的文件中所有字符全部存入str数组 | 把指定文件所有字符存入指定数组 |
fscanf | fscanf(fp,“%d,%s,%f”,&age,&name,&score); | 从输入流中读取数据,并用对应的格式写入到fp指向的文件里 | 用指定格式输入,于scanf函数大致相同 |
fprintf | fprintf(fp,“%d ,%s ,%f \n”); | 从fp指向的文件中对应的信息用指定格式输出到屏幕上 | 用指定格式输出,于printf函数大致相同 |
fread | fread(&Test,sizeof(Test),1,fp); | 从fp指向的文件中读取1个sizeof(Test)大小的数据(一条信息),存放在Test结构体中 | 从指定的文件读取指定大小数量的数据写入到指定结构体 |
fwrite | fwrite(&Test,sizeof(Test),1,fp); | 从结构体Test中读取1个sizeof(Test)大小的数据(一条信息),存放在fp指向的文件里 | 从指定的结构体读取指定大小数量的数据写入到指定的文件 |
SEEK_SET 文件的开头
SEEK_CUR 文件指针的当前位置
SEEK_END 文件的末尾
fseek(pf,2,SEEK_SET);
/*
pf->test.txt
test.txt内容:Hello
偏移前光标位置
->H ello
偏移后光标位置
He ->llo
*/
定位到pf指向的文件的 开头 偏移2字节 的位置
ftell(fp);
如果现在fp指向的文件里写的是“Hello”
现在光标位置在He ->llo(在第一个 l 这里)
ftell返回的值是从开头H到现在光标中间的差值,也就是2字节
如果定位到SEEK_END(文件末尾)的话”\0“也算一字节
和字面意思一样,把光标(文件指针)回退到起始位置(最开头)
跟上面一样,现在光标指向He ->llo(第一个 l )
rewind(fp);
光标就回到了 ->Hello(H前面)
简单写了点文件操作,有啥错误务必指正一下!!
希望能给大家带来点有用的东西(擦汗
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。