c语⾔程序⽂件的写法,C语⾔-⽂件
所谓“⽂件”是指⼀组相关数据的有序集合,该数据的集合的名字就是⽂件名。⽂件可以分为很多类,如源程序⽂件、⽬标⽂件、可执⾏⽂件、库⽂件等等。
⽂件通常是存放在外部介质上的(例如磁盘等),在使⽤时才会被调⼊内存中并执⾏。从⽤户的⾓度来看⽂件可以分为普通⽂件和设备⽂件。
普通⽂件是指存放在磁盘或者其它外部介质上的⼀个有序的集合,可以是源⽂件、⽬标⽂件、可执⾏程序等;也可以是⼀组待输⼊处理的原始数据,或是⼀组输出的结果。对于源⽂件、⽬标⽂件、可执⾏程序可以称作程序⽂件,⽽输⼊输出数据可以称作数据⽂件。
设备⽂件是指与主机相联的各种外部设备,如显⽰器、打印机、键盘等。在操作系统中,把外部设备也看作是⼀个⽂件来进⾏管理,把他们的输⼊输出等同于对磁盘⽂件的读写。
从⽂件编码的形式来看,⽂件可以分为ASCII码⽂件和⼆进制码⽂件。ASCII码⽂件也称作为⽂本⽂件,这种⽂件在磁盘中存放时每个字符对应⼀个字节,⽤于存放相应的ASCII码。
⼆进制⽂件是以⼆进制编码的⽅式来编写⽂件的。⼆进制⽂件虽然可以显⽰在屏幕上,但是却不能读懂。
⽂件的指针
在C语⾔中⽤⼀个指针变量指向⼀个⽂件,那么这个指针称为⽂件指针。另外,我们通过⽂件指针就可以对所指的⽂件进⾏各种操作。
⼀般形式为:
FILE* ⽂件变量标识符
解释:FILE应该是⼤写的,它实际上是由系统定义的⼀个结构体,该结构体包含了⽂件名、⽂件状态和⽂件当前位置等信息,因此在编写程序的时候我们不需要过于关⼼FILE结构的细节部分。
// 案例1:
FILE *fp;
/*说明:
fp表⽰FILE结构的指针变量,通过fp可以到存放某⼀个⽂件信息的结构变量,
然后按照结构体提供的信息到该⽂件,并对⽂件进⾏操作。*/
⽂件的打开和关闭
⽂件在进⾏读写操作之前,要打开⽂件,当使⽤完后应关闭⽂件。打开⽂件就是建⽴⽂件的各种有关信息,并使⽂件指针指向⽂件,以便进⾏其他操作。⽽关闭⽂件就是切断⽂件指针和⽂件之间的关系,换⽽⾔之,就是禁⽌利⽤指针操作⽂件。
在C语⾔中,⽂件操作都是由库函数完成的。如fopen 和 fclose。
1. ⽂件的打开 fopen()
fopen() 函数是⽤来打开⼀个⽂件,其⼀般的调⽤形式为:
⽂件指针名 = fopen(⽂件名,使⽤⽂件的⽅式);
注释:
⽂件指针名:必须被说明为FILE类型的指针变量;
⽂件名:被打开⽂件的⽂件名;
使⽤⽂件的⽅式:⽂件的类型和操作要求
// 案例2:
FILE* fp;
fp = fopen("text","r");
/*说明:
在当前⽬录下打开⽂件text,只允许“读”的操作,并且让fp指针指向该⽂件*/
使⽤⽂件的⽅式有12种,如下所⽰:
|使⽤⽂件⽅ | 意义 |
|----------|------------------------------:|
fgets和fgetc的区别|“rt” | 只读打开⼀个⽂本,只允许读|
|“wt” | 只写打开或者建⽴⼀个⽂件,只允许写数据|
|“at” | 追加打开⼀个⽂件,并在⽂件末尾写数据|
|“rb” | 只读打开⼀个⼆进制⽂件,只允许读|
|“wt” | 只写打开或者建⽴⼀个⽽进制⽂件,只允许写|
|“ab” | 追加打开⼀个⼆进制⽂件,并在⽂件末尾写数据|
|“rt+” | 读写打开⼀个⽂件,允许读和写 |
| “wt+” | 读写打开或建⽴⼀个⽂件,允许读写|
|“at+” | 读写打开⼀个⽂件,允许读,或在⽂件末尾追加数据|
|“rb+” | 读写打开⼀个⼆进制⽂件,允许读写|
|“wb+” | 读写打开或者建⽴⼀个⼆进制⽂件,允许读写 |
|“ab+” | 读写打开⼀个⼆进制⽂件,允许读,或在⽂件末追加数据|
说明:
由r、w、a、t、b、+六个字符拼成,个字符的意义:
r(read):读
w(write):写
a(append):追加
t(text):⽂本⽂件,可省略不写
b(banary):⼆进制⽂件
6.+:读和写
// 案例3:
FILE* fp;
fd = fopen("./text","r");
if (NULL == fd)
{
printf("open error\n");
exit(1);
}
// ⽤读“r”的⽅式打开⽂件“./text”;若⽂件打开失败时,fp为空,输出open error。
2. ⽂件的关闭
fclose()函数是指当⽂件使⽤完后,需要关闭⽂件。其⼀般形式为:
fclose(⽂件指针);
// 案例4:
fclose(fp);
// 说明:正常关闭⽂件时,fclose()函数的返回值是0。若返回⼀个⾮零的值,则表⽰关闭⽂件时发⽣错误
⽂件的读写
⽂件的读写是有多重⽅式的,它可以⼀个字节⼀个字节的读或写,也可以是⼀串⼀串的读或写。⽂件的读写可以分为下⾯四类,且它们的头⽂件均是。
1. 字符读写函数fgetc 和 fputc
字符的读写函数是以字节为单位读写函数。每⼀次可以从⽂件读出或向⽂件内写⼊⼀个字符。
读字符函数fgetc() 的⼀般形式:
字符变量 = fgetc(⽂件指针);
说明:将⽂件中的⼀个字符读取出来,然后存放在字符变量中。
写字符函数fputs() 的⼀般形式:
fputs(字符量,⽂件指针);
说明:将字符量中的字符,存放在想对应的⽂件中。
// 案例5:
#include
int main()
{
FILE* fp = fopen("./text","r");
if (NULL == fp)
{
printf("cann't open the file\n");
exit(1);
}
char ch;
// 读取⽂件中的字符,⼀个⼀个的读取。
ch = fgetc(fp);
while (EOF != ch) // EOF表⽰读到⽂件的末尾
{
printf("%c\n",ch);
ch = fgetc(fp);
}
close(fp);
// 向⽂件中写⼊数据
fp = fopen("./text1","w");
if (NULL == fp)
{
printf("cann't open the file\n");
exit(1);
}
printf("input a character:");
scanf("%c",&ch);
fputc(ch,fp); // 将ch变量中的字符存放到⽂件“./text1”中。
return 0;
}
注意:在⽹⽂件中写数据的时候,上的那种写法是,直接覆盖⽂件中的数据,⽽不是在⽂件的末尾追加数据。若想不改变⽂件原来的数据,只想在⽂件的末尾追加数据,那么需要将⽂件的打开⽅式“w”更改为“a”,这样我们就可以在原数据的基础上追加数据。
2. 字符串读写函数fgets 和 fputs
fgets() 的⼀般形式:
fgets(字符数组名,n,⽂件指针);
说明:n是⼀个正整数,表⽰从⽂件中读取的字符串不超过n-1个字符,在读⼊最后⼀个字符后加上结束符'\0'。
fputs()的⼀般形式:
fputs(字符数组名,⽂件指针);
说明:字符数组名,⾸先其中必须是⼀个已被初始化的字符数组,即⾥⾯有值;也可以⽤⼀个字符串常量(或指针变量)代替字符数组名。
//案例6:
#include
int main()
{
char ch[20];
FILE *fp = fopen("./text","rw");
if (NULL == fp)
{
printf("open error\n");
exit(1);
}
printf("input what you want to say:");
scanf("%s",ch);
//将字符串ch中的值写在⽂件text中。
fputs(ch,fp);
char ch2[30];
/
/ 从⽂件中读取数据,并由ch2字符串变量接收。
fgets(ch2,sizeof(ch2)-1,fp);
printf("ch2:%s\n",ch2);
return 0;
}
3. 数据块读写函数fread 和fwrite
C语⾔中不仅提供了字符、字符串的读写⽅式,同时也提供了数据块的读写⽅式。它们可⽤来读写⼀组数据,如:⼀个数组元素,⼀个结构变量的值等。
fread()的⼀般形式:
fread(buffer,size,count,fp);
fwrite()的⼀般形式:
fwrite(buffer,size,count,fp);
说明:
buffer 是⼀个指针,在fread函数中表⽰存放数据的⾸地址。在fwrite函数中表⽰输出数据的⾸地址;
size 表⽰数据块的字节数;
count 表⽰要读写的数据块的块数
fp 表⽰⽂件的指针
//案例7:
#include
struct student
{
int id;
char name[20];
float score;
};
int main()
{
struct student boy[2];
int i = 0;