C语言 fopen ( 打开文件 ) 、fwrite ( 将数据写至文件流 )、feof ( 检查文件流是否读到了文件尾 )

您所在的位置:网站首页 c语言fopen打开文件失败返回 C语言 fopen ( 打开文件 ) 、fwrite ( 将数据写至文件流 )、feof ( 检查文件流是否读到了文件尾 )

C语言 fopen ( 打开文件 ) 、fwrite ( 将数据写至文件流 )、feof ( 检查文件流是否读到了文件尾 )

#C语言 fopen ( 打开文件 ) 、fwrite ( 将数据写至文件流 )、feof ( 检查文件流是否读到了文件尾 )| 来源: 网络整理| 查看: 265

=========================================== fopen ( 打开文件 )

头文件 #include 定义函数 FILE * fopen(const char * path, const char * mode); 函数说明参数 path 字符串包含欲打开的文件路径及文件名, 参数 mode 字符串则代表着流形态. mode 有下列几种形态字符串: r 打开只读文件, 该文件必须存在. r+ 打开可读写的文件, 该文件必须存在. w 打开只写文件, 若文件存在则文件长度清为 0, 即该文件内容会消失. 若文件不存在则建立该文件. w+ 打开可读写文件, 若文件存在则文件长度清为零, 即该文件内容会消失. 若文件不存在则建立该文件. a 以附加的方式打开只写文件. 若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾, 即文件原先的内容会被保留. a+ 以附加方式打开可读写的文件. 若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾后, 即文件原先的内容会被保留.返回值 文件顺利打开后, 指向该流的文件指针就会被返回. 若果文件打开失败则返回 NULL, 并把错误代码存在errno 中. 附加说明 一般而言, 开文件后会作一些文件读取或写入的动作, 若开文件失败, 接下来的读写动作也无法顺利进行, 所以在 fopen()后请作错误判断及处理.

=========================================== fread ( 从文件流读取数据 )

头文件 #include 定义函数 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 定义函数 size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明 fwrite()用来将数据写入文件流中. 参数 stream 为已打开的文件指针, 参数 ptr 指向欲写入的数据地址, 总共写入的字符数以参数 size*nmemb 来决定.Fwrite()会返回实际写入的 nmemb 数目.返回值 返回实际写入的 nmemb 数目.

=========================================== fseek ( 移动文件流的读写位置 )

头文件 #include 定义函数 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 定义函数 int fclose(FILE * stream); 函数说明 fclose()用来关闭先前 fopen()打开的文件. 此动作会让缓冲区内的数据写入文件中, 并释放系统所提供的文件资源.返回值若关文件动作成功则返回 0, 有错误发生时则返回 EOF 并把错误代码存到 errno.错误代码 EBADF 表示参数 stream 非已打开的文件.

=========================================== feof ( 检查文件流是否读到了文件尾 )

头文件 #include 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾, 尾数 stream 为 fopen()所返回之文件指针. 如果已到文件尾则返回非零值, 其他情况返回 0.返回值返回非零值代表已到达文件尾.

=========================================== fgetc ( 由文件中读取一个字符 )

头文件 include定义函数 int fgetc(FILE * stream); 函数说明 fgetc()从参数 stream 所指的文件中读取一个字符. 若读到文件尾而无数据时便返回 EOF.返回值 getc()会返回读取到的字符, 若返回 EOF 则表示到了文件尾.

=========================================== fgets ( 由文件中读取一字符串 )

头文件 include定义函数 char * fgets(char * s, int size, FILE * stream); 函数说明 fgets()用来从参数 stream 所指的文件内读入字符并存到参数 s 所指的内存空间, 直到出现换行字符、读到文件尾或是已读了 size-1 个字符为止, 最后会加上 NULL 作为字符串结束.返回值 gets()若成功则返回 s 指针, 返回 NULL 则表示有错误发生.

=========================================== fileno ( 返回文件流所使用的文件描述词 )

头文件 #include 定义函数 int fileno(FILE * stream); 函数说明 fileno()用来取得参数 stream 指定的文件流所使用的文件描述词.返回值 返回文件描述词.

=========================================== fputc ( 将一指定字符写入文件流中 )

头文件 #include 定义函数 int fputc(int c, FILE * stream); 函数说明 fputc 会将参数 c 转为 unsigned char 后写入参数 stream 指定的文件中.返回值 fputc()会返回写入成功的字符, 即参数 c. 若返回 EOF 则代表写入失败.

=========================================== fputs ( 将一指定的字符串写入文件内 )

头文件 #include 定义函数 int fputs(const char * s, FILE * stream); 函数说明 fputs()用来将参数 s 所指的字符串写入到参数 stream 所指的文件内.返回值 若成功则返回写出的字符个数, 返回 EOF 则表示有错误发生.

=========================================== rewind ( 重设文件流的读写位置为文件开头 )

头文件 #include 定义函数 void rewind(FILE * stream); 函数说明 rewind()用来把文件流的读写位置移至文件开头. 参数 stream 为已打开的文件指针. 此函数相当于调用 fseek(stream, 0, SEEK_SET).

=========================================== fscanf ( 格式化字符串输入 )

头文件 #include 定义函数 int fscanf(FILE * stream, const char *format, ...); 函数说明 fscanf()会自参数 stream 的文件流中读取字符串, 再根据参数 format 字符串来转换并格式化数据.格式转换形式请参考 scanf(). 转换后的结构存于对应的参数内.返回值 成功则返回参数数目, 失败则返回-1, 错误原因存于 errno 中.

demo:

/******************************************************************** > File Name: 2.bmp图片处理.c > Author: xiening > Mail: [email protected] > Created Time: 2019年11月20日 星期三 10时09分07秒 *******************************************************************/ #include #include 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 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 ; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3