站长工具网,学设计多少钱,广东深圳网站建设,网站内怎么做链接fopen 函数原型#xff1a;FILE * fopen(const char * path, const char * mode); 相关函数#xff1a;open, fclose, fopen_s, _wfopen 返回值#xff1a;文件顺利打开后#xff0c;指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL#xff0c;并把错误代码存…fopen 函数原型FILE * fopen(const char * path, const char * mode); 相关函数open, fclose, fopen_s, _wfopen 返回值文件顺利打开后指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL并把错误代码存在 error 中。 函数简介 函数原型FILE * fopen(const char * path, const char * mode); 返回值文件顺利打开后指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL并把错误代码存在error中。 一般而言打开文件后会做一些文件读取或写入的动作若打开文件失败接下来的读写动作也无法顺利进行所以一般在 fopen() 后作错误判断及处理。 参数说明 参数 path字符串包含欲打开的文件路径及文件名参数 mode 字符串则代表着流形态。 mode 有下列几种形态字符串
字符串说明r以只读方式打开文件该文件必须存在。r以读/写方式打开文件该文件必须存在。rb以读/写方式打开一个二进制文件只允许读/写数据。rt以读/写方式打开一个文本文件允许读和写。w打开只写文件若文件存在则文件长度清为零即该文件内容会消失若文件不存在则创建该文件。w打开可读/写文件若文件存在则文件长度清为零即该文件内容会消失若文件不存在则创建该文件。a以附加的方式打开只写文件。若文件不存在则会创建该文件如果文件存在则写入的数据会被加到文件尾后即文件原先的内容会被保留EOF 符保留。a以附加方式打开可读/写的文件。若文件不存在则会创建该文件如果文件存在则写入的数据会被加到文件尾后即文件原先的内容会被保留EOF符不保留。wb以只写方式打开或新建一个二进制文件只允许写数据。wb以读/写方式打开或新建一个二进制文件允许读和写。wt以读/写方式打开或新建一个文本文件允许读和写。at以读/写方式打开一个文本文件允许读或在文本末追加数据。ab以读/写方式打开一个二进制文件允许读或在文件末追加数据。
以 x 结尾的模式为独占模式文件已存在或者无法创建一般是路径不正确都会导致 fopen 失败。文件以操作系统支持的独占模式打开。 上述的形态字符串都可以再加一个 b 字符如 rb、wb 或 ab 等组合加入 b 字符用来告诉函数库以二进制模式打开文件。如果不加 b表示默认加了 t即 rt、wt其中 t 表示以文本模式打开文件。由 fopen() 所建立的新文件会具有 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666) 权限此文件权限也会参考umask值。 有些 C编译系统可能不完全提供所有这些功能有的C版本不用r、“w”、“a”而用rw、“wr”、“ar等读者注意所用系统的规定。 二进制和文本模式的区别 1、在Windows系统中文本模式下文件以”\r\n代表换行。若以文本模式打开文件并用 fputs 等函数写入换行符\n时函数会自动在\n前面加上\r。即实际写入文件的是\r\n。 2、在类 Unix/Linux 系统中文本模式下文件以\n代表换行。所以 Linux 系统中在文本模式和二进制模式下并无区别。 打开方式总结各种打开方式主要有三个方面的区别 1、打开是否为二进制文件用“b”标识。 2、读写的方式有以下几种只读、只写、读写、追加只写、追加读写这几种方式。 3、对文件是否必 须存在、以及存在时是清空还是追加会有不同的响应。具体判断如下图。
程序示例 示例一 #include stdio.h #define F_PATH “d:\myfile\file.dat”
int main(void) { FILE fp NULL; / 需要注意 / fp fopen(F_PATH, “r”); if (NULL fp) { return -1; / 返回错误代码 / } fclose(fp); fp NULL; / 需要指向空否则会指向原打开文件地址 / return 0; } 示例二 #include stdio.h #include stdlib.h / 为了使用exit() */
int main(void) { int i 0; /* 用于 putchar getc 的数据接收 */ char *ch “”; FILE fp NULL; char fname[50]; / 用于存放文件名 / printf(“输入文件名”); scanf(%s, fname); fp fopen(fname, “r”); / 只供读取 / if (NULL fp) / 如果失败了 / { printf(“错误”); exit(1); / 中止程序 / } while ((ch[i] getc(fp)) ! EOF) { putchar(ch[i]); i ; } fclose(fp); / 关闭文件 / fp NULL; / 需要指向空否则会指向原打开文件地址 */ return 0; } 注意初学者往往会犯一个错误即在输入文件名时不加后缀名请注意加上 示例三 #include stdio.h FILE *stream, *stream2;
int main(void) { int numclosed; /打开读取(如果文件“crt_fopen”将失败。c不存在)/ if ((stream fopen(“crt_fopen.c”, “r”)) NULL) /* C4996 / //注意:不推荐使用fopen;考虑使用fopen_s代替p printf(“The file ‘crt_fopen.c’ was not opened\n”); else printf(“The file ‘crt_fopen.c’ was opened\n”); / Open for write / if ((stream2 fopen(“data2”, “w”)) NULL) / C4996 / printf(“The file ‘data2’ was not opened\n”); else printf(“The file ‘data2’ was opened\n”); / Closes tream if it is not NULL / if (stream) { if (fclose(stream)) { printf(“The file ‘crt_fopen.c’ was not closed\n”); } } / All other files are closed: */ numclosed _fcloseall(); printf(“Number of files closed by _fcloseall: %u\n”, numclosed); } 注意 在文件操作时需要注意以下几点问题 1、在定义文件指针时要将文件指针指向空如 FILE *fp NULL; 2、在文件操作完成后需要将文件关闭一定要注意否则会造成文件所占用内存泄漏和在下次访问文件时出现问题。 3、文件关闭后需要将文件指针指向空这样做会防止出现游离指针而对整个工程造成不必要的麻烦如fp NULL;