说到文件操作首先想到的就是文件的打开、关闭、读取以及写入等操作。文件可以分为文本文件和二进制文件,文本文件也称为ASCII文件,这种文件在保存时,每个字符对应一个字节,用于存放对应的ASCII码。二进制文件不是保存SASCII码,而是按二进制的编码方式保存文件内容。
C语言中操作文件是用一个指向文件的指针,这个文件指针包含着这个文件的信息,C语言中规定为FILE型,声明为:
typedef struct
{
short level
unsigned flags
char fd
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned ar *curp;
unsigned istemp;
short token;
}
如果要定义使用可以如下使用
FILE *fp;
说完了文件指针的声明和定义,接下来就是相关的文件操作
打开文件
打开文件使用函数fopen(),调用形式如下:
FILE *fp;
fp = fopen(文件名,打开文件形式);
这两个参数文件名不用多说就是要打开文件的名称,至于第二个参数系统定义了如下几个
r | 以只读方式打开文件,该文件必须存在。 |
r+ | 以读/写方式打开文件,该文件必须存在。 |
rb+ | 以读/写方式打开一个二进制文件,只允许读/写数据。 |
rt+ | 以读/写方式打开一个文本文件,允许读和写。 |
w | 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
w+ | 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。 |
a+ | 以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。 |
wb | 以只写方式打开或新建一个二进制文件,只允许写数据。 |
wb+ | 以读/写方式打开或新建一个二进制文件,允许读和写。 |
wt+ | 以读/写方式打开或新建一个文本文件,允许读和写。 |
at+ | 以读/写方式打开一个文本文件,允许读或在文本末追加数据。 |
ab+ | 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。 |
如果打开失败函数将返回NULL;
代码示例如下,我新建了一个test.txt
FILE *fp;
if ((fp = fopen("test.txt","r"))==NULL)
{
printf("no such file\n");
exit(0);
}
fclose(fp);
是个文本文件并且我是以只读的形式打开的。
关闭文件
关闭文件函数时fclosp(文件指针),例如上面的fclose(fp)。
文件写操作
文件写操作相关的函数又fputc()、fputs()、fprintf()。前两个可以类比putc()和puts(),例如我要将一个字符写入文件中
char ch = 'F';
fputc(ch,fp);
我将一串字符写入本例中的文件
fputs("QWERTYUIOPASDFGHJKLZXCVBNM0123456789",fp);
至于fprintf()是可以将各种各样的数据按照一定的格式输出到指定文件夹中
int i=70;
fprintf(fp,"%c",i);
将字符’A‘写入到文件夹中,打开刚刚文件可以看到已经写入进去了
文件读操作
文件读操作对应的有fgetc()、fgets()以及fsanf(),分别与写操作的三个函数相对应,fgetc()使用形式如下
char fc =fgetc(fp);
putchar(fc);
读取单个字符,fgets()读取字符串,如下调用:
fgets(字符数组名,n,文件指针);
其中n表示所得到字符串中字符的个数(包含“\0”)。
char fs[20] = {0};
fgets(fs,10,fp);
输出如下
先读取单个打印了A,之后读取了字符串FQWE。
fscanf()函数是按照格式读,形式如下:
fscanf(文件指针,格式字符串,输入列表)
还是以本例中新建的文件test.txt为例
char j;
int i;
for(i=0;i<10;i++)
{
fscanf(fp,"%c",&j);
putchar(j);
putchar('\n');
}
输出结果如下:
这些就是c语言中的文件打开、关闭以及读写了。