怎么查看网站的安全性,搭建网站需要的软件,天津科技网站,网站后台更新前台不显示文章目录为什么使用文件什么是文件文件名程序文件数据文件文件的打开和关闭流标准流文件指针文件的打开和关闭文件的随机读写文件读取结束的判定feof与ferror文件缓冲区为什么使用文件
如果没有文件操作#xff0c;程序运行时的数据存储在内存中#xff0c;当程序运行结束时…文章目录为什么使用文件什么是文件文件名程序文件数据文件文件的打开和关闭流标准流文件指针文件的打开和关闭文件的随机读写文件读取结束的判定feof与ferror文件缓冲区为什么使用文件如果没有文件操作程序运行时的数据存储在内存中当程序运行结束时就会回收内存数据清空如果想要永久保留数据就需要将数据存储到文件中什么是文件文件名每个文件要有一个唯一的文件标识以便用户识别和引用文件名包含三部分文件路径文件主干名文件后缀例如 c:\code\test.txt为了方便起见文件标识常被称为作文件名在程序设计中谈论的文件主要是程序文件与数据文件程序文件程序文件包括源文件(后缀是.c)目标文件(windows环境下后缀是.obj)可执行程序(windows环境下后缀是.exe)数据文件数据文件分为文本文件与二进制文件程序运行时数据在内存中以二进制形式存储如果不加转换直接存储到文件中就是二进制文件如果转换成ASCⅡ形式存储到文件中就是文本文件字符一律以ASCⅡ形式存储数值型可以二进制存储也可以ASCⅡ形式存储如有整数10000如果以ASCⅡ形式输出到磁盘磁盘占用5个字节(每个字符占一个字节如果按二进制形式存储则只需要4个字节文件的打开和关闭流我们程序的数据需要输出到各种外部设备中也需要从各种外部设备中读取数据不同的设备输入输出操作也不同为了方便程序员对不同设备的操作我们抽象出了流的概念可以将流想象成流淌着字符的河C程序对文件画面键盘的数据进行输入输出操作都需要通过流操作通常想要从流中写数据或是从流中读取数据都先需要打开流然后操作标准流那为什么我们并没有打开流依然能从键盘中读取数据和将数据输出到屏幕呢那是因为C程序启动时默认打开了三个流stdin 标准输入流大多数情况从键盘输入stdout 标准输出流大多数情况输出到显示器界面stderr 标准错误流大多数情况输出到显示器界面平时使用的scanf与printf都是通过这三个流操作的stdin stdout stderr这三个流类型都是FILE* 通常称为文件指针C语言中就是通过FILE*的文件指针来维护各种流的操作的文件指针缓冲文件系统中关键概念是文件类型指针简称为文件指针每个被使用的文件内存都会开辟相应的文件信息区来存放文件的相关信息(比如文件名文件当前位置等这些信息保存在结构体变量中这类结构体类型由系统声明取名为FILE例如在vs2013编译环境提供的stdio.h头文件中有以下声明struct_iobuf{char*_ptr;int_cnt;char*_base;int_flag;int_file;int_charbuf;int_bufsiz;char*_tmpfname;};typedefstruct_iobufFILE;不同的编译器FILE包含的内容不完全相同但大同小异每打开一个文件系统根据文件信息自动创建一个FILE结构的变量并自动填充使用者无需过多关注通常使用FILE类型的指针对FILE结构的变量进行维护定义一个FILE类型的指针指针指向某个文件的文件信息区通过该文件信息区能够访问该文件也就是说可以通过FILE*间接访问文件文件的打开和关闭文件在读写之前要先打开文件结束后要关闭文件打开文件同时会返回指向该文件的文件指针这样就建立起了指针与文件的联系ANSI C规定使用fopen打开文件fclose关闭文件FILE*fopen(constchar*filenameconstchar*mode);intflose(FILE*stream);mode表示文件的打开模式以下都是文件的打开模式示例代码#includestdio.hintmain(){FILE*pffopen(filename,r);if(NULLpf){perror(fopen:);return1;}fclose(pf);pfNULL;return0;}顺序读写函数介绍文件的随机读写fseekint fseek ( FILE * stream, long int offset, int origin );根据文件光标的位置和偏移量来定位文件光标文件光标的位置有SEEK_SET SEEK_CUR SEEK_END#includestdio.hintmain(){FILE*pffopen(example.txt,wb);if(NULLpf){perror(fopen);return1;}fputs(This is an apple.,pFile);//9是偏移量 SEEK_SET是文件光标位置fseek(pf,9,SEEK_SET);fputs( sam,pFile);fclose(pf);pfNULL;return0;}ftelllong int ftell ( FILE * stream );返回文件指针相对起始位置的偏移量#includestdio.hintmain(){longsize;FILE*pffopen(myfile.txt,rb);if(NULLpf){perror(Error opening file);return1;}fseek(pf,0,SEEK_END);// non-portablesizeftell(pf);fclose(pf);pfNULL;printf(Size of myfile.txt: %ld bytes.\n,size);return0;}rewindvoid rewind(FILE * stream);让⽂件指针的位置回到⽂件的起始位置intmain(){intn;charbuffer[27];FILE*pffopen(myfile.txt,w);for(nA;nZ;n)fputc(n,pf);rewind(pf);fread(buffer,1,26,pf);fclose(pf);pfNULL;buffer[26]\0;printf(buffer);return0;}文件读取结束的判定feof与ferrorint feof(FILE* stream);用来检测文件读取结束是否是因为读取到末尾int ferror(FILE* stream);用来检测文件读取结束是否是因为读取错误#includestdio.hintmain(){FILE*pffopen(text.txt,r);if(NULLpf){perror(fopen:);return1;}while(fgetc(pf)!EOF);if(feof(pf)){printf(读取到末尾\n);}elseif(ferror(pf)){printf(读取错误\n);}fclose(pf);pfNULL;return0;}文件读取结束时判断返回值fgetc判断返回值是否是EOFfgets判断返回值是否是NULLfread判断返回值是否小于实际要读的个数文件缓冲区ANSIC 标准采用缓冲文件系统来处理数据文件缓冲文件系统就是系统自动为打开的文件在内存中开辟一快文件缓冲区。从内存中向磁盘输入数据会先将数据存放在缓冲区中等缓冲区满后再一并将数据输入磁盘。磁盘向计算机读入数据先将数据存放在内存缓冲区中当缓冲区满时再逐个将数据输入程序数据区因为有缓冲区的存在在C语言操作文件时需要主动进行缓冲区刷新或者关闭文件否则可能导致文件读写错误