文件类型指针
FILE *指针变量名//例如:FILE *fp;
文件指针不同于文件位置,文件指针指向文件位置,在使用前必须在程序中定义即使文件指针指向某个文件。
文件的打开(fopen函数)
fopen(文件名,文件的使用方式)//打开成功返回指向该文件的FILE类型的文件指针,打开失败返回NULL
文件的使用方式(以文本为例,二进制文件在字母后面加b就好):
方式 | 含义 |
---|---|
r | 以只读方式打开文件,该文件必须存在否则打开失败 |
r+ | 以读写方式打开文件,该文件必须存在否则打开失败 |
w | 打开只写文件,若文件存在则文件长度清为0(即该文件内容会消失)若文件不存在则建立该文件 |
w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留) |
a+ | 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符不保留) |
文件的读取
fgetc();
作用:能够从文件中读取一个字符,并且把光标(文件指针)移动到下一个字符,文本结束有EOF(宏定义标记读到末尾)。
读取文件内容程序事例(文本文件):
char ch;
while((ch = fgetc(fp)) != EOF)//while(EOF != (ch = fgetc(fp)))
{
printf("%c",ch);
}
读取二进制文件时不能使用上述方法(二进制文件结尾没有EOF标识符),应使用feop(fp);(文件结束返还值为非零,否则为0)
程序写法:
char ch;
while(!feof(fp))
{
ch=fgetc(fp);
printf("%c",c);
}
fgets();
fgets(char *s, int size, FILE *stream);
参数 | 含义 |
---|---|
第一个参数 | 是读取的数据存放的内存的指针(数组) |
第二个参数 | 存放读取内容的大小 |
第三个参数 | 是要读取的文件的指针 |
返回值 | 函数的第一个参数 |
作用:与fgetc大致相同,不同的是fgets可以一次性读取一行
程序:
char str[200];//长度可以自己规定
while(fgets(str,200,fp))//函数第一个参数为存放读取内容的地址,第二个参数为自己定义的数组长度
{
printf("%s\n",str);
}//读取整个文件的方法与fgetc相同
fread();
fread( void *buffer, size_t size, size_t count, FILE *stream )
参数 | 含义 |
---|---|
第一个参数 | 是读取的数据存放的内存的指针(数组) |
第二个参数 | 每次读取的字节数 |
第三个参数 | 读取的次数 |
第四个参数 | 要读取的文件的指针 |
返回值 | 实际读取的大小 |
作用:相比于前两个函数这个函数的强大之处在于可以随意的读取文件的内容的。
程序:
char str[200]={0};
while(fread(str,1,100,fp)
{
printf("%s",str);
}
文件的写入
fputc()
fputc(int char, FILE *stream)
参数 | 含义 |
---|---|
第一个参数 | 这是要被写入的字符。该字符以其对应的 int 值进行传递 |
第一个参数 | 要读取的文件的指针 |
返回值 | 如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符 |
程序: |
fputc('A',fp);
fputs()
fputs(const char *str, FILE *stream)
参数 | 含义 |
---|---|
第一个参数 | 这是指向要被写入的元素数组的指针。 |
第二个参数 | 要读取的文件的指针 |
返回值 | 该函数返回一个非负值,如果发生错误则返回 EOF。 |
程序: |
char *str="ABCDEFG";//如果想换行,换行符需要自己添加。
fputs(str,fp);
fwrite()
fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
参数 | 含义 |
---|---|
第一个参数 | 指向要被写入的元素数组的指针。 |
第二个参数 | 要被写入的每个元素的大小,以字节为单位。 |
第三个参数 | 元素的个数,每个元素的大小为 size 字节。 |
第四个参数 | 要写入的文件的指针 |
返回值 | 返回实际写入的数据块数目 |
程序:
char *str="ABCDEF"
fwrite(str,1,strlen(str),fp)
//fwite 可以写入任何类型
int num=123456;
fwrite(&num,sizeof(num),1,fp)
文件指针定位
rewind()
rewind(fp);
函数功能:将文件的读/写指针移动到文件开头
fseek()
fseek(FILE *stream, long offset, int fromwhere);
参数 | 含义 |
---|---|
第一个参数 | 要操作的文件指正 |
第二个参数 | 偏移量,整数表示正向偏移,负数表示负向偏移 |
第三个参数 | 设定从文件的哪里开始偏移,可能取值为:SEEK_CUR(0,文件开头)、 SEEK_END(1,当前文件) 或 SEEK_SET(2,文件结尾) |
返回值 | 返回实际写入的数据块数目 |
程序:
fseek(fp,100L,0);//把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);//把fp指针移动到离文件当前位置100字节处;
ffseek(fp,-100L,2);//把fp指针退回到离文件结尾100字节处。
文件关闭
fclose()
fclose(fp)
正常关闭返回0,否则返回EOF。