热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

C语言文件操作fopen,fclose,mkdir详解

本文给大家详细介绍了下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);
所需库:
返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回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

C++

/**
 * Author: Gneveek
 * Data: 2011-10-6
 * Descripition: Clock Chen's Homework : File operation #1
 * 一、将a.txt拷贝到/test目录下,名字也为a.txt
 */ 
#include 
#include  //用 _mkdir()创建一个文件夹(目录) 
int main()
{
 _mkdir("test");
 
 char c;
 FILE *fin, *fout;
 if((fin = fopen("a.txt","r")) == NULL)
 printf("I'm so sorry,Open file error.\n");
 if((fout = fopen("test\\a.txt","w")) == NULL) //以 w 方式,只能用于往文件中写,如果不存在,则以指定的文件名新建一个文件
 printf("I'm so sorry,Open file error.\n");
 
 while((c = fgetc(fin)) != EOF)
 fputc(c,fout); 
 
 fclose(fin);
 fclose(fout);
 return 0;
}

 

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

4.判断文件是否存在和是否可读可写

int access(const char *pathname,int mode);

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

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

用一个程序实例来认识这个函数:

输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读,不存在提示不存在,不可读提示不可读,如果存在并可读,则在当前目录下,创建一个目录test,并将该文件拷贝到test中

C++

/**
 * Author: Gneveek
 * Data: 2011-10-6
 * Descripition: Clock Chen's Homework : File operation #2
 *二、输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读,
 *不存在提示不存在,不可读提示不可读,如果存在并可读,
 *则在当前目录下,创建一个目录test,并将该文件拷贝到test中
 */ 
#include 
#include 
#include  
#include 
 
int main()
{
 FILE *fin, *fout;
 char filename[256]; 
 char pathname[256] = "test\\";  
 scanf("%s",filename);
 if(access(filename,F_OK) == -1) //判断存在与否 
 printf("This file does not exist!\n");
 else if(access(filename,R_OK) == -1) //如果存在,判断可读否 
 printf("Cann't Read!\n");
 else               //到这里,说明即存在又可读 
 {
 char c;
 _mkdir("test"); 
 
 strcat(pathname,filename);  
 
 fin = fopen(filename,"r"); 
 fout = fopen(pathname,"w");
 
 while((c = fgetc(fin)) != EOF)
  fputc(c,fout);
 }
 return 0;
}


推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 掌握Linux:基础命令入门
    本章节深入浅出地介绍了Linux系统中的基本命令操作,帮助读者快速上手并理解其核心功能。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
author-avatar
qiaoyan1984_868
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有