C语言文件io操作

2023-11-20

一、fopen

在C语言中,操作文件之前应该先打开文件。使用<stdio.h>头文件中的fopen()函数可以打开文件,因为FILE也是结构体,我们通过返回一个文件指针就可以对文件进行操作。在用完fopen之后要记得关闭该文件流。

用法:

FILE* fl = fopen("文件名","打开方式");

其中打开方式有:

 为了实现低耦合我们也可以这样写:

int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"打开方式");
    
    fclose(fl);
    return 0;
}

因为在main函数中我们传入的是一个指向字符串的指针数组所以我们可以用argv[1]来表示传入的第二个字符串,一般我们Linux中第一个传入的参数是所要编译的文件,第二个才是所要操作的文件,所以可以这样写。这样我们就可以打开一个文件了,但是我们还没有对文件进行读写操作,所以控制台还不会有任何输出。

为了判断文件是否打开成功我们还可以用if语句进行判断一下:

int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"打开方式");
    
    if(fl == NULL)
{
    perror("fopen error!\n");
    exit(0);
}
    
    fclose(fl);
    return 0;
}

如果fl打开失败则用函数perror打印一下,然后用exit(0)终止程序。注意:用exit()函数要加上include<stdlib.h>头文件 

二、fgetc

这个是最简单的读文件操作,这个函数用来从文件指针指向的文件中读一个字符,返回的值是读取的字符,如果发生错误则返回EOF

用法:

fgetc(文件指针);

int main()
{
    FILE* fl = fopen("test.txt","r");
    
    char ch = fgetc(fl);
    printf("%c",ch);

    fclose(fl);
    return 0;
}

在其中我们以只读的方式打开了文件test.txt,用fgetc()获取的fl指向文件的第一个字符,并把其赋值给了ch,假设我们test.txt文件内容是这样的:

abcd

则打印结果是:

 a

 三、fgets

与上面的fgetc()函数不同的是,fgets()函数是从一个文件中一次性读一行数据,并且它会把读取的字符串复制到缓冲区buf,并在最后追加一个null字符来终止字符串。

用法:

fgets(char *buf, int n, FILE* fl);

#define 10 SIZE
int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"r");
    
    char buf[20];
    fgets(buf,SIZE,fl);
    fclose(fl);
    return 0;
}

 其中有两种情况:

1、当SIZE大于一行的字符串时,那么当读到字符串末尾的换行符时,fgets()会返回,并在buf的最后面插入字符串结束标志'\0'。而buf缓冲区剩余的位置不会再填充

2、当SIZE小于一行的字符串时,那么会读入n-1个字符,此时并没有读到末尾的'\n',但是还是会在buf缓冲区末尾加上'\0'

可以用while循环来输出fgets()函数读入的字符串

#define 10 SIZE
int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"r");
    
    char buf[20];

    while(fgets(buf,SIZE,fl)!=NULL)
{
    printf("%s",buf);
}
    fclose(fl);
    return 0;
}

三、fputc

fputc是向指定的文件中写入一个字符

 用法:

fputc(int ch,FILE* fl);

其中ch为要写入的字符,fl为文件指针,fputc()写入成功时返回要写入的字符,失败时返回EOF

如:

#define 10 SIZE
int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"a");
    
    char ch = 'a';
    fputc(ch,fl);
    fclose(fl);
    return 0;
}

注意:此时用的打开文件方式是a,a是往文件后面追加的意思,不会覆盖文件里面已有的内容,而用w的话就会覆盖掉文件里面已有的内容。

四、fputs

fputs()函数是将一行字符串写入到指定的文件中,但不包括空字符
用法:

fputs(char *str,FILE* fl);

 其中 str是要输入的字符串,fl是指向所要写入的文件的指针

#define 10 SIZE
int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"打开方式");
    
    fputs("aabbcc",fl);
    fclose(fl);
    return 0;
}

其中将字符串aabbcc写入到了fl指向的文件中。

五、fscanf

fscanf函数是根据format格式从fl中读取数据,与fgets类似

int fscanf(FILE *fl, const char *format, [argument...]);

 其中fl是指向文件的指针,format是格式字符串,[argument...]是接收字符串的参数。fscanf()遇到空格、回车会断开,fgets遇到回车会断开

如:

#define 10 SIZE
int main(int arg,char* argv[])
{
    FILE* fl = fopen(argv[1],"r+");
    
    while(!feof(fl))
{
    char buf[10] = {0};

    fscanf(fl,%s,buf);
    printf("%s",buf);
}
    fclose(fl);
    return 0;
}

其中定义了一个buf缓冲区,将读取到的字符放到buf中,然后输出

六、fprintf

fprintf()函数用于向文件中输出格式化文本,与fputs类似

该函数类似于printf函数,只是printf将文本打印到命令窗口中,fprintf将文本输出到文件中

用法:

int fprintf (FILE* fl, const char*format, [argument...])

其中,fl为指向文件的指针,format为要写入格式,[argument]为可变参数。

 #include<stdio.h>
   #include<stdlib.h>
   int main(int arv,char *argv[])
   {
 
      FILE *fl = fopen(argv[1],"a");
  
       if(fl == NULL)
       {
          perror("error!\n");
          exit(0);
      }
 
      char str[] = "abcdef";
    for(int i=0;i<6;i++){
      fprintf(fl,"buf[%d] = %c\n",i,str[i]);
     }
      fclose(fl);

    return 0;
 }

其中定义了一个字符串str,并用fprintf函数将该字符串以"buf[%d] = %c\n"格式输入到fl指向的文件中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言文件io操作 的相关文章

随机推荐

  • Elasticsearch 日志

    下载并安装 Filebeat 首次使用 Filebeat 请参阅入门指南 复制代码片段 curl L O https artifacts elastic co downloads beats filebeat filebeat 7 2 0
  • SpringBoot 整合slf4j 日志配置

    slf4j 即 Simple Logging Facade for Java 简单门面日志 它是对所有日志框架制定的一种规范 标准 接口 并不是一个框架的具体的实现 它只服务于各种各样的日志系统 slf4j提供了统一的记录日志的接口 对不同
  • OpenGL.ES在Android上的简单实践:14-全景(惯性滑动球体)

    OpenGL ES在Android上的简单实践 14 全景 惯性滑动球体 1 整理封装全景球 现在 我们的地球已经能正确的显示出来 我们来增加必要的交互 使得我们左右滑动屏幕的时候 地球能旋转起来 而且是像一个地球仪一样 手指离开屏幕后 能
  • 如何修改游戏服务器ip地址吗,怎么修改游戏服务器ip地址吗

    怎么修改游戏服务器ip地址吗 内容精选 换一换 AI视频分析服务作业的输出结果需要指定输出通道 请提前配置好输出通道DIS或者Webhook AI视频分析服务作业的结果输出类型选择为DIS时 在创建作业前 您需确保DIS通道已开通成功 开通
  • 分-布-式-缓-存-(转)

    在前面的一些文章中 从实战的角度 讲解了有关 memcached的应用 容灾 监控等等 但是缺乏对理论的讲解和原理性的剖析 本文将从理论的角度去介绍 让大家从宏观上对 分布式缓存 nosql 等技术有所了解 以便进一步学习和使用 在构建大规
  • tensorflow 激活函数relu6为什么是6

    普通relu y max 0 x 相当于无限多个bernoulli分布 即无限多个骰子 relu6 y min max 0 x 6 相当于有六个bernoulli分布 即6个硬币 同时抛出正面 这样鼓励网络学习到稀疏特征 网络里面每一个输出
  • Linux之rm命令

    rm 删除一个文件或者目录 删除文件可以直接使用rm命令 若删除目录则必须配合选项 r rm r 删除当前目录下的所有文件及目录 文件一旦删除 则无法恢复 命令参数 f 强制删除 即使不存在的文件也不会报错 i交互式删除 r列出全部目录和子
  • 全国热门带正文新闻查询API接口

    一 接口介绍 解决同一类新闻在不同平台上的内容获取问题 在归档主流新闻平台的内容数据基础上 对外提供统一的调用方式来完成实时 最新的相关新闻的获取 极大方便各类企业在自有软件中集成新闻内容的功能 支持200余个新闻大站 为保证数据的及时性
  • PID控制算法(PID控制原理与程序流程)

    PID控制算法 PID控制原理与程序流程 暗影玄极 博客园 cnblogs com
  • RFID系统组成及其功能

    RFID系统因应用不同其组成会有所不同 但基本原理都是相似的 下面我们来讨论一下射频识别的基本原理 既然是射频识别 则必然要由读写器和电子标签组成 当然 在应用中通常还包含上层的管理系统 电子标签和读写器都要装有天线 以便于通信交流 其中读
  • Scratch资料

    Scratch软件是免费的 免费的 免费的 任何需要花钱才能下载Scratch软件的全是骗子 1 什么是Scratch Scratch是麻省理工学院的 终身幼儿园团队 开发的一种图形化编程工具 是面向青少年的一款模块化 积木化 可视化的编程
  • 【RF-SSA-LSTM】随机森林-麻雀优化算法优化时间序列预测研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 RF特征选择 2 2 LSTM预测 2 3 SSA LSTM预测 2 4 MLP预测
  • JDK不同版本间的新特性-基础篇

    目录 一 JDK环境部署 1 1 JDK18与IDEA2022环境准备 二 JDK9 10新特性 2 1 JDK9新特性 私有接口方法 2 2 JDK9新特性 通过try块自动关闭资源 2 4 JDK10新特性 var动态类型推断 局部变量
  • LVGL V8应用——实现互斥

    按键互斥 void language setup lv obj t cont lv obj create page lv obj set size cont 320 160 lv obj t ch cb lv checkbox create
  • python项目部署nginx_Nginx Python(Django)项目部署

    CentOS 7 系统默认安装 Python 2 7 版本 本节搭建的是基于 Python3 的 Django 网站 所以需要升级到 Python3 版本 1 安装 Python 及 Django 配置样例如下 yum install y
  • kubeadm部署1.20.0版本kubernetes

    一 环境准备 1 虚拟机环境 角色 主机名 IP地址 服务组件 master master 01 192 168 43 100 comtroller manager etcd scheduler kube apiserver node no
  • 在vmware里面看不到已经设置的共享文件夹

    查看你是否设置了共享文件夹 vmware hgfsclient 在上图的虚拟机点击安装vmware tools 之后会在vmware tools文件里面有一个压缩的文件 把它复制到自己创的文件夹并解压 自己创建文件夹使用mkdir p mo
  • mysql注册服务

    当我们使用win7命令行关闭mysql服务器的时候 命令 net stop mysql 出现 服务名无效的提示 因为我们没有在win下注册该服务 注册步骤 以管理员身份运行cmd 进入到mysql的bin目录 cd bin目录 例如我的命令
  • 中转inline hook,不需要恢复首字节的hook

    中转inline hook 不需要恢复首字节的hook 分类 HOOK 2015 02 23 23 38 446人阅读 评论 1 收藏 举报 HOOK inline hook 注 我实验的环境 win7 x64 经验证XP会有稍微区别 主要
  • C语言文件io操作

    一 fopen 在C语言中 操作文件之前应该先打开文件 使用