对于一个嵌入式开发人员来说,对文件的操作是非常频繁的,所以,对文件操作的知识需要相当的熟悉。
文件部分由几个常用的函数,总结如下:
打开关闭文件函数:
fopen()
和
fclose();
字符读写函数:
fgetc()
和
fputc();
字符串读写函数:
fgets()
和
fputs();
数据段读写函数:
fread()
和
fwrite();
格式化读写函数:
fprintf()
和
fscanf();
首先,标准文件的操作对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。
下面举一些简单的例子对
fgetc()
和
fputc()
函数的使用:
fgetc
函数的功能是从指定的文件中读一个字符。
函数调用的形式为:字符变量
=fgetc(
文件指针
)
;
例如:
ch=fgetc(fp);
其意义是从打开的文件
fp
中读取一个字符并送入
ch
中。
a.c
#include<stdio.h>
main()
{
FILE *fp;
ç
FILE
是由系统定义取名,用来存放文件有关信息的一个结构类型
(
须大写
)
char ch:
if((fp=fopen(“/root/test/a.txt”,”rt”))==NULL)
ç
如
a.txt
不存在
fp
会指向空,成为空指针
{
printf(“Can not open file!”);
exit(0);
}
ç
这段程序来判断是否有所指定的文件,如要打开的文件不存在,会提示指定信息
ch=fgetc(fp);
ç
把从文件读出的字符赋值给字符变量
ch
while(ch!=EOF)
ç
EOF
为文件的末尾,到达文件末尾之前一直循环
{
putchar(ch);
ç
输出单个字符
ch
ch=fgetc(fp);
ç
再次给
ch
赋值,直到读入内容结束
}
ç
此循环的作用为将读入的字符逐个输出,达到输出字符串的目的
printf(“\n”);
ç
输出工作完成后,再输出一个换行
fclose(fp);
ç
对文件操作完成后要关闭文件
}
fputc()
函数的功能是把一个字符写入指定的文件中,
函数的调用形式为:
fputc(
字符量
,
文件指针
)
;
其中,待写入的字符量可以是字符常量或变量。
例如:
fputc(‘a’,fp);
其意义是把字符
a
写入
fp
所指向的文件中。
b.c
#include<stdio.h>
main()
{
FILE *fp;
char ch;
If((fp=open(“/root/a.txt”,”wt+”))==NULL)
{
printf(“Can not open file!”);
exit(0);
}
printf(“please input a char:\n”);
ch=getchar();
while(ch!=’\n’)
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ç
位置指针复位函数,使位置指针移到文件的首部,以便从文件首开始读
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf(“\n”);
fclose(fp);
}
从程序的调试过程中可以体会到以下感受到:
为增强程序的可靠性,常用下面的方法打开一个文件:
if((fp=fopen("
文件名
","
操作方式
"))==NULL)
{
printf("can not open this file\n");
exit(0);
}
使用文件的方式有以下几种,下面给出了它们的符号和意义:
“r”
只读打开一个文本文件,只允许读数据
“w”
只写打开或建立一个文本文件,只允许写数据
“a”
追加打开一个文本文件,并在文件末尾写数据
“rb”
只读打开一个二进制文件,只允许读数据
“wb”
只写打开或建立一个二进制文件,只允许写数据
“ab”
追加打开一个二进制文件,并在文件末尾写数据
“rt+”
读写打开一个文本文件,允许读和写
“wt+”
读写打开或建立一个文本文件,允许读写
“at+”
读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”
读写打开一个二进制文件,允许读和写
“wb+”
读写打开或建立一个二进制文件,允许读和写
“ab+”
读写打开一个二进制文件,允许读,或在文件末追加数据
“rt”
只读打开一个文件,只允许读数据
“wt”
只写打开或建立一个文本文件,只允许写数据
“at”
追加打开一个文本文件,并在文件的末尾写数据
文件的使用方式由
r,w,a,t,b,+
等六个字符拼成,各字符的含义如下:
r---read:
读
w---write:
写
a---append:
追加
t---text:
文本文件
b---banary:
二进制文件
+ ---
读和写
凡是用
”r”
打开一个文件,该文件必须已经存在,且只能从该文件中读出。
凡是用
”w”
打开的文件只能向该文件写入。若该文件不存在则自动创建,若存在则将其删除并建立一个新文件。
凡是用
”a”
打开一个文件,只能向已经存在的文件追加信息。
对于
fgetc
函数的使用:
1.
在
fgetc
函数调用中,读取的文件必须是以读或读写方式打开的。
2.
读取字符的结果也可以不向字符变量赋值,例如:
fgetc(fp);
但是读出的字符不能保存。
3.
在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用
fgetc
函数后,该位置指针将向后移动一个字节。因此可连续多次使用
fgetc
函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
对于
fputc
函数的使用:
1.
被写入的文件可以用、写、读写,追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。
2.
每写入一个字符,文件内部位置指针向后移动一个字节。
3.fputc
函数有一个返回值,如写入成功则返回写入的字符,否则返回一个
EOF
。可用此来判断写入是否成功。
Exit()
函数
格式:
void exit(
程序状态值
)
;
功能:关闭已经打开的所有文件,结束程序运行,返回操作系统,并将
”
程序状态值
”
返回给操作系统。当
”
程序状态值
”
为
0
时,表示程序正常退出;非
0
值时,表示程序出错退出。
r+
和
a+
的区别:使用前者打开文件时,读写位置指针指向文件头,即写入文件时覆盖原来的内容;使用后者,读写指针指向文件尾,即写入内容时追加到原内容后面。
使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。