目录
文件
(操作系统管理数据的基本单位)
三要素:
文件路径、文件名、后缀。
文件路径:
由于在 C 语言中 '\' 一般是转义字符的起始标志,故在路径中需要用两个 '\' 表示路径中目录层次的间隔。(也可以使用 '/' 作为路径中的分隔符。)
(例如,"E:\\ch10.doc"或者"E:/ch10.doc",表示文件 ch10.doc 保存在 E 盘根目录下。"f1.txt" 表示当前目录下的文件 f1.txt。)
文件名:
标识文件名字的合法标识符,如 ch10、file_1 等都是合法的文件名。
后缀:
一般用于标明文件的类型,使用方式为:文件名.后缀。常见的后缀类型有:doc、txt、dat、c、cpp、obj、exe、bmp、jpg 等。
常见的15个文件拓展名如下:
一、.txt:文本格式,文本文件的拓展名。
二、.pdf:便携式文档格式,电子文件格式,是以语言图像为基本,它不能像word一样随意编辑。
三、.doc或者.docx:文档格式,word文档后缀。
四、.jpg:图片格式。体积比png小。但是图片属于有损压缩。多次编辑和保存,图片就模糊了。
五、.gif:动图图像格式。
六、.png:图片格式,图片属于无损压缩。
七、.mp4:视频文件格式。
八、.mov:苹果开发的高清视频格式。
九、.mp3:音频格式。
十、.rar:压缩文件格式。
十一、.zip:压缩文件格式。
十二、.exe:可执行程序。一般软件的安装包就是这个拓展名。
十三、.bak:备份文件。
十四、.ppt:演示文稿
十五、.htm或者html :超文本文档
文件的打开与关闭
(“打开”和“关闭”可调用标准库 stdio.h 中的 fopen 和 fclose 函数实现。)
函数 fopen 的原型如下
FILE * fopen(char *filename, char *mode);
参数:
1、filename:文件名,包括路径。例如:“D:\\f1.txt”
2、mode:文件打开模式,指出对该文件可进行的操作。
打开方式
关闭函数 fclose 的原型如下。
int fclose(FILE *fp);
例如:
FILE *fpl,*fp2; //定义两个文件指针变量fpl和fp2
fpl=fopen(”D:\\fl.txt”,”r”); //以只读模式打开文件 fl.txt
if (NULL==fpl) //以返回值fpl判断是否打开成功,如果为NULL表示失败
{
printf ("Failed to open the file !\n");
exit (0) ; //终止程序,stdlib .h头文件中
}
fp2=fopen ("f2.txt","a") ; //以追加写入的模式打开文件f2 .txt
if(NULL==fp2)
{
printf ("Failed to open the file !\n");
exit (0);
}
fclose (fpl); //关闭fpl指针对应文件(fl.txt)
fclose (fp2); //关闭fp2指针对应文件(f2.txt)
文件的顺序读写
字符输入输出
fgetc
1、字符输入函数 fgetc 的函数原型为:
int fgetc (FILE *fp);// 返回类型应为 int 型,而非 char 型。
也可以使用 fgetc (stdin) 实现。其中,stdin 指向标准输入设备—键盘所对应的文件。stdin 不需要人工调用函数 fopen 打开和 fclose 关闭。
所在头文件:<stdio.h>。
函数功能:从文件指针 fp 所指向的文件中输入一个字符。
fputc
2.字符输出函数 fputc 的函数原型为:
int fputc (int c, FILE *fp);// 返回类型应为 int 型,而非 char 型。
也可以使用 fputc (ch,stdout); 实现。其中,stdout 指向标准输出设备—显示器所对应的文件。stdout 也不需要人工调用函数 fopen 打开和 fclose 关闭。
所在头文件:<stdio.h>
函数功能:向 fp 指针所指向的文件中输出字符 c。
rewind
3、文件读写位置复位函数 rewind 的函数原型为:
(对一个文件进行读写操作时,经常会把一个文件中读写位置重新调整到文件的开始处,可以使用函数 rewind 实现。)
void rewind (FILE *fp);
所在头文件:<stdio.h>
函数功能:把 fp 所指向文件中的读写位置重新调整到文件开始处。
字符串输入输出
fgets
1、字符串输入函数 fgets 的函数原型为:
char * fgets (char *s, int size, FILE * fp);
所在头文件:<stdio.h>
函数功能:从 fp 所指向的文件内,读取若干字符(一行字符串),并在其后自动添加字符串结束标志 '\0' 后,存入 s 所指的缓冲内存空间中(s 可为字符数组名),直到遇到回车换行符或已读取 size-1 个字符或已读到文件结尾为止。该函数读取的字符串最大长度为 size-1。
fputs
2、字符串输出函数 fputs 的函数原型为:
int fputs (const char *str, FILE *fp);
所在头文件:<stdio.h>
函数功能:把 str(str 可为字符数组名)所指向的字符串,输出到 fp 所指的文件中。
格式化输入输出
fscanf
1、文件格式化输入函数 fscanf 的函数原型为:
int fscanf (文件指针,格式控制串,输入地址表列);
所在头文件:<stdio.h>
函数功能:从一个文件流中执行格式化输入,当遇到空格或者换行时结束。注意该函数遇到空格时也结束,这是其与 fgets 的区别,fgets 遇到空格不结束。
fprintf
2、文件格式化输出函数 fprintf 的函数原型为:
int fprintf (文件指针,格式控制串,输出表列);
所在头文件:<stdio.h>
函数功能:把输出表列中的数据按照指定的格式输出到文件中。
例如:
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
FILE *fp=fopen("C:\\Users\\86133\\Desktop\\time.txt","w");
char name[ 10] ="张三";
char no[15]="20170304007";
int age=17;
if(NULL==fp)
{
printf ("Failed to open the file !\n");
exit (0);
}
fprintf(fp,"%s\t%s\t%d\n",name,no,age);
fclose(fp);
return 0;
运行程序后,当前目录下生成了time.txt 文件,并且其内容为:
张三 20170304007 17
(但是我觉得这个不是很好用,可以直接用fread,定义一个结构体,然后输入内容,具体操作可以看下面)
二进制方式读写数据块
fread
1、数据块读取(输入)函数 fread 的函数原型为:
unsigned fread (void *buf, unsigned size, unsigned count, FILE* fp);
所在头文件:<stdio.h>
函数功能:从 fp 指向的文件中读取 count 个数据块,每个数据块的大小为 size。把读取到的数据块存放到 buf 指针指向的内存空间中。
参数:
- buf:指向存放数据块的内存空间,该内存可以是数组空间,也可以是动态分配的内存。void类型指针,故可存放各种类型的数据,包括基本类型及自定义类型等。
- size:每个数据块所占的字节数。
- count:预读取的数据块最大个数。
- fp:文件指针,指向所读取的文件。
fwrite
2、数据块写入(输出)函数 fwrite 的函数原型为:
unsigned fwrite (const void *bufAunsigned size,unsigned count,FILE* fp);
所在头文件:<stdio.h>
函数功能:将 buf 所指向内存中的 count 个数据块写入 fp 指向的文件中。每个数据块的大小为 size。
在操作文件时,经常使用 feof 函数来判断是否到达文件结尾。
feof
3、feof 函数的函数原型为:
int feof (FILE * fp);
所在头文件:<stdio.h>
函数功能:检查 fp 所关联文件流中的结束标志是否被置位,如果该文件的结束标志已被置位,返回非 0 值;否则,返回 0。