===========================================
fopen ( 打开文件 )
- 头文件
#include <stdio.h> - 定义函数
FILE * fopen(const char * path, const char * mode);
- 函数说明
- 参数 path 字符串包含欲打开的文件路径及文件名, 参数 mode 字符串则代表着流形态.
mode 有下列几种形态字符串:
r 打开只读文件, 该文件必须存在.
r+ 打开可读写的文件, 该文件必须存在.
w 打开只写文件, 若文件存在则文件长度清为 0, 即该文件内容会消失. 若文件不存在则建立该文件.
w+ 打开可读写文件, 若文件存在则文件长度清为零, 即该文件内容会消失. 若文件不存在则建立该文件.
a 以附加的方式打开只写文件. 若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾, 即文件原先的内容会被保留.
a+ 以附加方式打开可读写的文件. 若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾后, 即文件原先的内容会被保留. - 返回值
文件顺利打开后, 指向该流的文件指针就会被返回. 若果文件打开失败则返回 NULL, 并把错误代码存在errno 中. 附加说明 一般而言, 开文件后会作一些文件读取或写入的动作, 若开文件失败, 接下来的读写动作也无法顺利进行, 所以在 fopen()后请作错误判断及处理.
===========================================
fread ( 从文件流读取数据 )
- 头文件
#include <stdio.h> - 定义函数
size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);
- 函数说明
fread()用来从文件流中读取数据. 参数 stream 为已打开的文件指针, 参数 ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数 sizenmemb 来决定. Fread()会返回实际读取到的 nmemb 数目, 如果此值比参数 nmemb 来得小, 则代表可能读到了文件的尾或有错误发生, 这时必须用 feof()或 ferror()来决定发生什么情况. - 返回值
返回实际读取到的 nmemb 数目.
===========================================
fwrite ( 将数据写至文件流 )
- 头文件
#include <stdio.h> - 定义函数
size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);
- 函数说明
fwrite()用来将数据写入文件流中. 参数 stream 为已打开的文件指针, 参数 ptr 指向欲写入的数据地址, 总共写入的字符数以参数 size*nmemb 来决定.Fwrite()会返回实际写入的 nmemb 数目. - 返回值
返回实际写入的 nmemb 数目.
===========================================
fseek ( 移动文件流的读写位置 )
- 头文件
#include <stdio.h> - 定义函数
int fseek(FILE * stream, long offset, int whence);
- 函数说明
fseek()用来移动文件流的读写位置. 参数 stream 为已打开的文件指针, 参数 offset 为根据参数 , whence 来移动读写位置的位移数,参数 whence 为下列其中一种:
SEEK_SET 从距文件开头 offset 位移量为新的读写位置. SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
SEEK_END 将读写位置指向文件尾后再增加 offset 个位移量. 当 whence 值为 SEEK_CUR 或SEEK_END 时, 参数 offset 允许负值的出现.
下列是较特别的使用方式:
- 欲将读写位置移动到文件开头时:fseek(FILE *stream, 0, SEEK_SET);
- 欲将读写位置移动到文件尾时:fseek(FILE *stream, 0, 0SEEK_END);
- 返回值
当调用成功时则返回 0, 若有错误则返回-1, errno 会存放错误代码.
===========================================
fclose ( 关闭文件 )
- 头文件
#include <stdio.h> - 定义函数
int fclose(FILE * stream);
- 函数说明
fclose()用来关闭先前 fopen()打开的文件. 此动作会让缓冲区内的数据写入文件中, 并释放系统所提供的文件资源. - 返回值
- 若关文件动作成功则返回 0, 有错误发生时则返回 EOF 并把错误代码存到 errno.错误代码 EBADF 表示参数 stream 非已打开的文件.
===========================================
feof ( 检查文件流是否读到了文件尾 )
- 头文件
#include <stdio.h> - 定义函数
int feof(FILE * stream);
- 函数说明
feof()用来侦测是否读取到了文件尾, 尾数 stream 为 fopen()所返回之文件指针. 如果已到文件尾则返回非零值, 其他情况返回 0. - 返回值
- 返回非零值代表已到达文件尾.
===========================================
fgetc ( 由文件中读取一个字符 )
- 头文件
include<stdio.h> - 定义函数
int fgetc(FILE * stream);
- 函数说明
fgetc()从参数 stream 所指的文件中读取一个字符. 若读到文件尾而无数据时便返回 EOF. - 返回值
getc()会返回读取到的字符, 若返回 EOF 则表示到了文件尾.
===========================================
fgets ( 由文件中读取一字符串 )
- 头文件
include<stdio.h> - 定义函数
char * fgets(char * s, int size, FILE * stream);
- 函数说明
fgets()用来从参数 stream 所指的文件内读入字符并存到参数 s 所指的内存空间, 直到出现换行字符、读到文件尾或是已读了 size-1 个字符为止, 最后会加上 NULL 作为字符串结束. - 返回值
gets()若成功则返回 s 指针, 返回 NULL 则表示有错误发生.
===========================================
fileno ( 返回文件流所使用的文件描述词 )
- 头文件
#include <stdio.h> - 定义函数
int fileno(FILE * stream);
- 函数说明
fileno()用来取得参数 stream 指定的文件流所使用的文件描述词. - 返回值
返回文件描述词.
===========================================
fputc ( 将一指定字符写入文件流中 )
- 头文件
#include <stdio.h> - 定义函数
int fputc(int c, FILE * stream);
- 函数说明
fputc 会将参数 c 转为 unsigned char 后写入参数 stream 指定的文件中. - 返回值
fputc()会返回写入成功的字符, 即参数 c. 若返回 EOF 则代表写入失败.
===========================================
fputs ( 将一指定的字符串写入文件内 )
- 头文件
#include <stdio.h> - 定义函数
int fputs(const char * s, FILE * stream);
- 函数说明
fputs()用来将参数 s 所指的字符串写入到参数 stream 所指的文件内. - 返回值
若成功则返回写出的字符个数, 返回 EOF 则表示有错误发生.
===========================================
rewind ( 重设文件流的读写位置为文件开头 )
- 头文件
#include <stdio.h> - 定义函数
void rewind(FILE * stream);
- 函数说明
rewind()用来把文件流的读写位置移至文件开头. 参数 stream 为已打开的文件指针. 此函数相当于调用 fseek(stream, 0, SEEK_SET).
===========================================
fscanf ( 格式化字符串输入 )
- 头文件
#include <stdio.h>
定义函数
int fscanf(FILE * stream, const char *format, ...);
- 函数说明
fscanf()会自参数 stream 的文件流中读取字符串, 再根据参数 format 字符串来转换并格式化数据.格式转换形式请参考 scanf(). 转换后的结构存于对应的参数内. - 返回值
成功则返回参数数目, 失败则返回-1, 错误原因存于 errno 中.
demo:
/********************************************************************
> File Name: 2.bmp图片处理.c
> Author: xiening
> Mail: 1606598696@qq.com
> Created Time: 2019年11月20日 星期三 10时09分07秒
*******************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
if(4 > argc)
{
printf("use: R G B \n");
return -1;
}
//打开文件
FILE *fp = fopen("./image.bmp", "r+");
if(NULL == fp)
{
perror("open error\n");
return -1;
}
//文件流指针偏移
fseek(fp, 54, SEEK_SET);
//读文件:
char buf[3*800*480];
int ret = fread(buf, 3, 800*480, fp);
if(800*480 != ret)
{
perror("read error\n");
return -1;
}
//写文件:在原来的基础上画个矩形颜色为R G B 范围:(宽:210-577 高:105-366)
for(int i=105; i<366; i++)
{
for(int j=210; j<577; j++)
{
buf[(i*800+j)*3] = atoi(argv[3]);
buf[(i*800+j)*3+1] = atoi(argv[2]);
buf[(i*800+j)*3+2] = atoi(argv[1]);
}
}
fseek(fp, 54, SEEK_SET);
fwrite(buf, 3, 800*480, fp);
//关闭文件:
fclose(fp);
return 0 ;
}