app会替代网站吗,做游戏网站的前景,室内装修网站html源码 企业,本地建站软件文件基础
什么是文件 文件是在计算机中以实现某种功能、或某个软件的部分功能为目的而定义的一个单位。磁盘上的文件是文件。但是在程序设计中#xff0c;我们一般谈的文件有两种#xff1a;程序文件、数据文件#xff08;从文件功能的角度来分的#xff09;。
程序文件 …文件基础
什么是文件 文件是在计算机中以实现某种功能、或某个软件的部分功能为目的而定义的一个单位。磁盘上的文件是文件。但是在程序设计中我们一般谈的文件有两种程序文件、数据文件从文件功能的角度来分的。
程序文件 程序文件包括源程序文件后缀为.c,目标文件windows环境后缀为.obj,可执行程序文件windows环境后缀为.exe。
数据文件 数据文件是存储各种码制的数据的文件包括图形、图像、声音、数字等各种数据。文件是记录在外存上的相关信息的命名组合是逻辑外存的最小分配单元。数据文件可以是数字的、字符的、字符数字的或二进制的。本篇文章主要讨论的就是数据文件
文件名 一个文件要有一个唯一的文件标识以便用户识别和引用。文件名包含3部分文件路径文件名主干文件后缀 。例如 c:\code\test.txt。 ps. [ ./为当前目录 ../为当前目录的上一次目录 ]
为了方便起见文件标识常被称为文件名。
二进制文件和文本文件
数据在内存中以二进制的形式存储如果不加转换的输出到外存就是二进制文件。
如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
文件的打开与关闭
流与标准流
流
C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。一般情况下我们要想向流里写数据或者从流中读取数据都是要打开流然后在进行相关的操作。
标准流 C语言程序在启动的时候默认打开了3个流 stdin - 标准输入流在大多数的环境中从键盘输入scanf函数就是从标准输入流中读取数据。stdout - 标准输出流大多数的环境中输出至显示器界面printf函数就是将信息输出到标准输出流中。stderr - 标准错误流大多数环境中输出到显示器界面。 这三个流的类型是FILE*。有了这默认打开的三个流 我们就可以直接使用scanf、printf等函数进行输入输出操作了。
文件指针
缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的取名FILE。 FILE* pf;//⽂件指针变量
定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是⼀个结构体变量。通过该件信息区中的信息就能够访问该文件。也就是说我们可以通过文件指针变量能够间接找到与它关联的文件从而进行相关的一系列操作。 文件的打开与关闭
ANSIC 规定使用 fopen 函数来打开文件 fclose 来关闭文件。
//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream ); 其中mode表示文件的打开模式下面是文件的打开模式 int main()
{//打开⽂件FILE* pFile fopen(data.txt, w);//⽂件操作if (pFile NULL){perror(fopen);return;}//关闭⽂件fclose(pFile);pFile NULL;return 0;
}
文件的顺序读写
顺序读写函数介绍 fgetc与fputc 使用方法请看代码
int main()
{FILE* pf fopen(data.txt, w);//打开文件if (pf NULL){perror(fopen);return;}for (int i 0; i 26; i) //写文件{ //往data.txt文件里面写入26个英文字母fputc(a i, stdout);}fclose(pf); //关闭文件pf NULL;return 0;
} 使用方法请看代码
int main()
{FILE* pf fopen(data.txt, r); //打开文件if (pf NULL){perror(fopen);return;}for (int i 0; i 5; i) //读文件{//读取data.txt文件中的前五个字符printf(%c , fgetc(pf));}fclose(pf); //关闭文件pf NULL;return 0;
}
fgets与fputs
使用方法请看代码
int main()
{FILE* pf fopen(data.txt, w);if(pf NULL){perror(fopen);return;}//把一个字符串写到data.txt文件里fputs(abcde\n, pf);fclose(pf);pf NULL;return 0;
} 使用方法请看代码
int main()
{FILE* pf fopen(data.txt, r);if(pf NULL){perror(fopen);return;}char arr[] xxxxxxxxxxxx;fgets(arr, 8, pf);fclose(pf);pf NULL;return 0;
}
fscanf与fprintf 使用方法请看代码
struct Stu
{char name[20];int age;float score;
};
int main()
{struct Stu s { zhangsan,20,99.9 };FILE* pf fopen(data.txt, w);if (pf NULL){perror(fopen);return;}//写文件fprintf(pf, %s %d %.1f, s.name, s.age, s.score);fclose(pf);pf NULL;return 0;
} 使用方法请看代码
int main()
{struct Stu s { 0 };FILE* pf fopen(data.txt, r);if (pf NULL){perror(fopen);return;}//读文件fscanf(pf, %s %d %f, s.name, (s.age), (s.score));//把读到的内容打印到控制台上fprintf(stdout, %s %d %.1f, s.name, s.age, s.score);fclose(pf);pf NULL;return 0;
}
fread与fwrite 使用方法请看代码
int main()
{struct Stu s { lisi,30,66.5 };FILE* pf fopen(data.txt, wb);if (pf NULL){perror(fopen);return;}//二进制写文件fwrite(s, sizeof(s), 1, pf);fclose(pf);pf NULL;return 0;
} 使用方法请看代码
int main()
{struct Stu s { 0 };FILE* pf fopen(data.txt, rb);if (pf NULL){perror(fopen);return;}//二进制读文件fread(s, sizeof(s), 1, pf);printf(%s %d %.1f, s.name, s.age, s.score);fclose(pf);pf NULL;return 0;
} 文件的随机读写
fseek
定义int fseek ( FILE * stream, long int offset, int origin );
其中offset为偏移量origin为偏移位置
ftell 定义long int ftell ( FILE * stream );
返回文件指针(光标)相对于起始位置的偏移量。
rewind
定义void rewind ( FILE * stream );
让文件指针(光标)的位置回到文件的起始位置。
文件读取结束的判定
文本文件读取是否结束判断返回值是否为 EOF fgetc 或者 NULL fgets 例如 fgetc 判断是否为 EOF . fgets 判断返回值是否为 NULL . 二进制文件的读取结束判断判断返回值是否小于实际要读的个数。