C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)


1.建文件夹
int _mkdir(const char *path,mode_t mode);
函数名: _mkdir   
功 能: 建立一个目录   
用 法: int _mkdir( const char *dirname );   
头文件库:direct.h   
返回值:创建一个目录,若成功则返回0,否则返回-1

=====================================================

2.打开文件fopen()

函数功能: 打开一个文件   
函数原型:FILE * fopen(const char * path,const char * mode);
所需库: <stdio.h>
返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。   

一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
if((fin = fopen("a.txt","r")) == NULL)
 printf("Open file error.\n");

参数说明:   
参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。   
mode有下列几种形态字符串:  (常用的就前几个,后面用到了再查,不用记) 
r 以只读方式打开文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

rb 为输入打开一个二进制文件。
wb 只写打开或新建一个二进制文件;只允许写数据。
ab 向二进制文件尾添加数据

r+ 以可读写方式打开文件,该文件必须存在。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

rb+ 读写打开一个二进制文件,只允许读数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。   

rt+ 读写打开一个文本文件,允许读和写。  
wt+ 读写打开或着建立一个文本文件;允许读写。   
at+ 读写打开一个文本文件,允许读或在文本末追加数据。   


上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。   
有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。

==========================================================

3.关闭文件 fclose()
在使用完一个文件后应该关闭它,以防止它再误用,关闭就是指文件指针变量不指向该文件,也就是文件指针变量与文件脱钩,此后不能再通过该指针对原来与其相联系的文件进行读写操作。除非再次打开,使该指针变量重新指向该文件。

  用 fclose 函数关闭文件,fclose 函数调用的一般形式为

  fclose(文件指针);

  例如:

  fclose(fp);

  应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将丢失数据。因为如前所述,在向文件写数据时,是先将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区,而程序结束运行,就会将缓冲区中的数据丢失,用 fclose 函数关闭文件,可以避免这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。

  fclose 函数也带回一个值,当顺利地执行了关闭操作,则返回值为 0 ,否则返回 EOF (-1) 。可以用 ferror 函数来测试。
==============================================================
下面用一个程序来说明上面几个函数用法:

将a.txt拷贝到/test目录下,名字也为a.txt

[cpp] view plaincopy
  1. /** 
  2.  * Author: Gneveek 
  3.  * Data: 2011-10-6 
  4.  * Descripition:  Clock Chen's Homework : File operation #1 
  5.  * 一、将a.txt拷贝到/test目录下,名字也为a.txt 
  6.  */   
  7. #include <stdio.h>  
  8. #include <direct.h> //用 _mkdir()创建一个文件夹(目录)   
  9. int main()  
  10. {  
  11.     _mkdir("test");  
  12.       
  13.     char c;  
  14.     FILE *fin, *fout;  
  15.     if((fin = fopen("a.txt","r")) == NULL)  
  16.         printf("I'm so sorry,Open file error.\n");  
  17.     if((fout = fopen("test\\a.txt","w")) == NULL) //以 w 方式,只能用于往文件中写,如果不存在,则以指定的文件名新建一个文件  
  18.         printf("I'm so sorry,Open file error.\n");  
  19.           
  20.     while((c = fgetc(fin)) != EOF)  
  21.         fputc(c,fout);     
  22.           
  23.     fclose(fin);  
  24.     fclose(fout);  
  25.     return 0;  
  26. }  


================================================================
4.判断文件是否存在和是否可读可写
int access(const char *pathname,int mode);

pathname:是文件名称
mode是我们要判断的属性.可以取以下值或者是他们的组合:
R_OK文件可以读
W_OK文件可以写
X_OK文件可以执行
F_OK文件存在.

当我们测试成功时,函数返回0,否则如果有一个条件不符时,返回-1.

用一个程序实例来认识这个函数:
输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读,不存在提示不存在,不可读提示不可读,如果存在并可读,则在当前目录下,创建一个目录test,并将该文件拷贝到test中

[cpp] view plaincopy
  1. /** 
  2.  * Author: Gneveek 
  3.  * Data: 2011-10-6 
  4.  * Descripition:  Clock Chen's Homework : File operation #2 
  5.  *二、输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读, 
  6.  *不存在提示不存在,不可读提示不可读,如果存在并可读, 
  7.  *则在当前目录下,创建一个目录test,并将该文件拷贝到test中 
  8.  */   
  9. #include <stdio.h>  
  10. #include <io.h>  
  11. #include <direct.h>   
  12. #include <string.h>  
  13.   
  14. int main()  
  15. {  
  16.     FILE *fin, *fout;  
  17.     char filename[256];   
  18.     char pathname[256] = "test\\";     
  19.     scanf("%s",filename);  
  20.     if(access(filename,F_OK) == -1) //判断存在与否   
  21.         printf("This file does not exist!\n");  
  22.     else if(access(filename,R_OK) == -1) //如果存在,判断可读否   
  23.         printf("Cann't Read!\n");  
  24.     else                              //到这里,说明即存在又可读   
  25.     {  
  26.         char c;  
  27.         _mkdir("test");       
  28.           
  29.         strcat(pathname,filename);            
  30.           
  31.         fin = fopen(filename,"r");    
  32.         fout = fopen(pathname,"w");  
  33.           
  34.         while((c = fgetc(fin)) != EOF)  
  35.             fputc(c,fout);  
  36.     }  
  37.     return 0;  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

差分进化算法_OPTIMUS软件功能特性介绍【全局优化算法模块】

导读&#xff1a;面向应用工程师的商业软件咨询、自研软件定制开发服务的仿真公众号&#xff0c;点击关注进入菜单&#xff0c;查看更多精彩内容。OPTIMUS提供自适应进化算法(Self-adaptive Evolution)&#xff0c;从用户给定的起始解或者算法随机产生的起始种群开始&#xff0…

Java生产力提示:社区的热门选择

社区已经发言。 我们已将您最好和最出色的生产力技巧汇总到一篇文章中。 我们都有自己的小技巧&#xff0c;可以帮助我们提高工作效率&#xff0c;并提高生产率。 我们使用工具来避免繁琐的日常任务&#xff0c;并运行脚本来自动化流程。 我们所做的一切只是为了确保一切就绪&…

JAVA获取Classpath根路径的方法

方法一&#xff1a; String path Test.class.getResource("/").toString(); System.out.println("path " path); 此方法在tomcat下面没有问题&#xff0c;可以取到WEB-INF/classes path file:/home/ngidm_db2/AS_Tomcat7_0_29/webapps/NGIDM/WEB-INF/c…

Navicat 9.1、10.0 简体中文最新版,注册码(For Mysql)

Navicat 9.1、10.0 简体中文最新版&#xff0c;注册码(For Mysql) by 尘缘 on 七月 17th, 2011 // Filed Under → MySQL Navicat属于偶的必备开发工具&#xff0c;最新版的自动提示&#xff0c;SQL格式化比较好用。 今天测试过Navicat 9.1.11&#xff0c;注册码可以使用。 下…

win10休眠设置_电脑总是“打瞌睡”?教你如何简单关闭自动休眠

电脑休眠指的是将当前处于运行状态的数据保存在硬盘中&#xff0c;整机完全停止供电。通常电脑的自动休眠是有一个电源计划的&#xff0c;电脑如果在设定的时间内没有使用&#xff0c;那么就会进入自动休眠状态。然而许多人长时间不操作电脑&#xff0c;只是想让电脑继续执行一…

nohup 命令 用途:不挂断地运行命令

简单而有用的nohup命令在UNIX/LINUX中&#xff0c;普通进程用&符号放到后台运行&#xff0c;如果启动该程序的控制台logout&#xff0c;则该进程随即终止。要实现守护进程&#xff0c;一种方法是按守护进程的规则去编程&#xff08;本站有文章介绍过&#xff09;&#xff0…

让VC编译的程序链接到系统的 msvcrt.dll 的方法

安装 DDK 或者 WDK &#xff0c;提取里面的 msvcrt.lib 和 msvcrtd.lib &#xff0c;这两个文件分别对应 release 和 debug 版本。 然后再按下图进行设置&#xff1a; 编译生成的程序&#xff0c;就直接链接系统的 msvcrt.dll 上了&#xff0c;debug 版是链接到 msvcrtd.dll。

局域网arp攻击_网络安全基础之ARP攻击和防御

本文转载于 SegmentFault 社区作者&#xff1a;吴小风前言在看这篇文章之前&#xff0c;请大家先看下交换机的工作原理&#xff0c;不知大家有没有想过数据链路层中头部协议数据帧的目的MAC地址是如何获取的呢&#xff1f;这就是今天的主角ARP协议&#xff0c;通过广播来获取IP…

SocketServer模块,hmac模块验证client合法性

hmac模块&#xff1a; 1.模块初识&#xff1a; import hmac # h hmac.new() #括号里要给它连个bytes类型&#xff0c;一个是自定义的secret_key&#xff0c;一个是你想进行加密的bytes # 密文 h.digest() # hmac.compare_digest() #括号内传另外一个密文&#xff0c;看是否相…

以实例让你真正明白mapreduce---填空式、分布(分割)编程

问题导读&#xff1a;1.如何在讲mapreduce函数中的字符串等信息&#xff0c;输出到eclipse控制台&#xff1f;2.除了使用下文方法&#xff0c;还有其它方法输出到控制台&#xff1f;3.map中&#xff0c;系统默认接受的value值是什么&#xff1f;4.reduce输出不是自己想要的结果…

使用Spring编写和使用SOAP Web服务

在RESTful Web服务时代&#xff0c;我有机会使用SOAP Web Service。 为此&#xff0c;我选择了Spring &#xff0c;这是因为我们已经在项目中使用Spring作为后端框架&#xff0c;其次它提供了一种直观的方式来与具有明确定义的边界的服务进行交互&#xff0c;以通过WebServiceT…

前端---vscode 的基本使用

1. vscode 的基本介绍 全拼是 Visual Studio Code (简称 VS Code) 是由微软研发的一款免费、开源的跨平台代码编辑器&#xff0c;目前是前端(网页)开发使用最多的一款软件开发工具。 2. vscode 的安装 下载网址: Download Visual Studio Code - Mac, Linux, Windows选择对应…

建立Win32 Console Project时会出“error LNK1123” 错误

VS2010在经历一些更新后&#xff0c;建立Win32 Console Project时会出“error LNK1123” 错误&#xff0c;解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可&#xff0c;但是没新建一个项目都要这样设置一次。在建立VS2010 Win32 Proje…

将同时共享的用户数量限制为20_共享充电宝市场需求及计划

18269363827 冯从2016-2018年这些时间中共享充电宝市场空间巨大&#xff0c;据权威数据显示共享充电宝市场整个用户数量实现了从0-5888万的巨大增幅&#xff0c;2019年共享充电市场用户规模将继续保持大幅增长至年底达1亿用户规模。在2019年充电宝租赁市场气势盛大&#xff0c;…

mysql中limit用法

使用查询语句的时候&#xff0c;经常要返回前几条或者中间某几行数据&#xff0c;这个时候怎么办呢&#xff1f;不用担心&#xff0c;mysql已 经为我们提供了这样一个功能。 SELECT*FROMtableLIMIT [offset,]rows |rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回…

Redis实现之整数集合

整数集合 整数集合&#xff08;insert&#xff09;是集合键的底层实现之一&#xff0c;当一个集合只包含整数值元素&#xff0c;并且这个集合的元素数量不多时&#xff0c;Redis就会使用整数集合作为集合键的底层实现。举个栗子&#xff0c;如果我们创建一个只包含五个元素的集…

启动rocketmq 报错_RocketMQ为什么要保证订阅关系的一致性?

前段时间有个朋友向我提了一个问题&#xff0c;他说在搭建 RocketMQ 集群过程中遇到了关于消费订阅的问题&#xff0c;具体问题如下&#xff1a;然后他发了报错的日志给我看&#xff1a;the consumers subscription not exist我第一时间在源码里找到了报错的位置&#xff1a;or…

scala rest_使用路标的Scala和Java的Twitter REST API

scala rest如果您已经阅读了此博客上的其他文章&#xff0c;您可能会知道我喜欢创建各种数据集的可视化。 我刚刚开始一个小项目&#xff0c;在这里我想可视化来自Twitter的一些数据。 为此&#xff0c;我想直接从Twitter检索有关关注者的信息和个人资料信息。 我实际上开始寻找…

MySql中关于某列中相同数值连续出现次数的统计

MySql中关于某列中相同数值连续出现次数的统计 原表如下&#xff1a; www.2cto.com 100 101 102 100 100 103 104 102 102 105 106 101 101 输出如下&#xff1a; www.2cto.com 100 1 101 2 102 3 100 4 100 4 103 5 104 6 10…

设计模式之- 外观模式(Facade Pattern)

外观模式 外观模式(Facade Pattern)&#xff1a;外部与一个子系统的通信必须通过一个统一的外观对象进行&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。外观模式又称为门面模式&…