(1)C语言文件操作
1 什么是文件
文件有不同的类型,在程序设计中,主要用到两种文件:
(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行这种文件的内容是程序代码。
(2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据、货物交易的数据等。主要讨论的是数据文件。
(3)操作系统把各种设备统一当做文件来处理。
(4)根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。
数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件,可以认为它就是存储在内存的数据的映像,所以也称之为映像文件(image file)。如果要求在外存上以ASCⅡ代码形式存储,则需要在存储前进行转换。ASCⅡ文件又称文本文件(text file),每一个字节存放一个字符的ASCII代码。 ASCII码输出字符的时候是一个字节对应一个字符(也可以这样表示一个数值),二进制文件只能表示数值且是二进制数值形式。
(2)文件缓冲区
文件在进行输入输出操作的时候都先把数据分别输入到缓冲区里面以后在进行输入与输出,缓冲区大小由C编译器决定
(3)文件类型指针
每一个文件都会在内存开辟一个专门用于存放文件信息的区域,这些信息是保存在一个结构体变量File里面的,信息如下:
typedef struct
{
short level;//缓冲区“满”或“空”的程度
unsigned flags;//文件状态标志
char fd;//文件描述符
unsigned char hold;//如缓冲区无内容不读取字符
short bsize;//缓冲区的大小
unsigned char*buffer;//数据缓冲区的位置
unsigned char*curp;//文件位置标记指针当前的指向
unsigned istemp;//临时文件指示器
short token;//用于有效性检查
} FILE;
FILE*fp;//定义一个指向FILE结构体的指针fp
在进行文件操作的时候都定义一个FILE的指针类型来对FILE进行访问而不是直接用FILE,具体如下:
(4)文件操作
(1)fopen的函数调用参数如下图所示:
FILE* pf= fopen("word.txt", "r");
if (pf != NULL)
{
printf("成功打开文件\n");
return;
}
else printf("打开文件失败\n");
fclose(pf)
(2)向文件读写单个字符的函数fgetc()
和fputc()
FILE*fp1=fopen("in.txt","w+");
char ch;
printf("请输入你想输入到文件的字符串(以#作为结束):");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp1);
ch=getchar();
}
fclose(fp1);
//------------------------------------------------------------------------------------------
printf("the answer is:");
FILE*fp2=fopen("answer.txt","r");
ch=fgetc(fp2);
while(ch!=EOF)
{
printf("%c",ch);
ch=fgetc(fp2);
}
fclose(fp2);
①ch=getchar()
用于给字符ch赋值,但是往往scanf
后面跟着一个getchar
是为了消化scanf
的回车
② fgetc()访问文件内的字符的时候是一个一个访问的,每一次访问完一个字符以后fgetc()就会自动往后面移动一个字符,如果要判断是否移动到了文件的末位就可以用一下语句:
在这里插入代码片