0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C程序员如何创建、打开、关闭文本文件或二进制文件

电子工程师 来源:未知 作者:李倩 2018-11-08 14:38 次阅读

我们讲解了 C 语言处理的标准输入和输出设备。本次我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。

一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。

打开文件

您可以使用fopen( )函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FILE的一个对象,类型FILE包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:

FILE *fopen(constchar* filename,constchar* mode );

在这里,filename是字符串,用来命名文件,访问模式mode的值可以是下列值中的一个:

如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

"rb","wb","ab","rb+","r+b","wb+","w+b","ab+","a+b"

关闭文件

为了关闭文件,请使用 fclose( ) 函数。函数的原型如下:

int fclose( FILE *fp );

如果成功关闭文件,fclose( )函数返回零,如果关闭文件时发生错误,函数返回EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件stdio.h中的常量。

C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写文件。

写入文件

下面是把字符写入到流中的最简单的函数:

int fputc(int c, FILE *fp );

函数fputc()把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回EOF。您可以使用下面的函数来把一个以 null 结尾的字符串写入到流中:

int fputs(constchar*s, FILE *fp );

函数fputs()把字符串s写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回EOF。您也可以使用int fprintf(FILE *fp,const char *format, ...)函数来写把一个字符串写入到文件中。尝试下面的实例:

注意:请确保您有可用的tmp目录,如果不存在该目录,则需要在您的计算机上先创建该目录。

/tmp一般是 Linux 系统上的临时目录,如果你在 Windows 系统上运行,则需要修改为本地环境中已存在的目录,例如:C:\tmp、D:\tmp等。

当上面的代码被编译和执行时,它会在 /tmp 目录中创建一个新的文件test.txt,并使用两个不同的函数写入两行。接下来让我们来读取这个文件。

读取文件

下面是从文件读取单个字符的最简单的函数:

int fgetc( FILE * fp );

fgetc()函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回EOF。下面的函数允许您从流中读取一个字符串:

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

函数fgets()从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区buf,并在最后追加一个null字符来终止字符串。

如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。您也可以使用int fscanf(FILE *fp, const char *format, ...)函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。

当上面的代码被编译和执行时,它会读取上一部分创建的文件,产生下列结果:

1:This2:is testing for fprintf...3:Thisis testing for fputs...

首先,fscanf()方法只读取了This,因为它在后边遇到了一个空格。其次,调用fgets()读取剩余的部分,直到行尾。最后,调用fgets()完整地读取第二行。

二进制 I/O 函数

下面两个函数用于二进制输入和输出:

size_tfread(void *ptr, size_tsize_of_elements, size_tnumber_of_elements, FILE *a_file); size_tfwrite(constvoid *ptr, size_tsize_of_elements, size_tnumber_of_elements, FILE *a_file);

这两个函数都是用于存储块的读写 - 通常是数组或结构体。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    705

    浏览量

    41248
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128299
  • 函数
    +关注

    关注

    3

    文章

    3864

    浏览量

    61305

原文标题:C语言中的文件读写

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用文本文件(.txt)进行数据存取的技巧总结

    二进制还是文本文件取决于fopen的方式,如果用wt,则存储为文本文件,这样用记事本打开就可以正常显示了;如果用w则存储为二进制
    发表于 02-21 10:56

    matlab文件操作及读txt文件

    ,先读入数据再添加数据。文件不存在则创建。另外,在这些字符串后添加一个“t”,如‘rt’‘wt+’,则将该文件文本方式
    发表于 02-21 11:56

    如何在Nios II中烧写二进制文件到flash中

    中我们可以将flash中的数据读出来,那怎样才能烧写有用的数据呢。下面就八一八。首先要理清楚二进制文件文本文件的区别。   大家都知道计算机的存储在物理上是二进制的,所以
    发表于 03-08 15:33

    labview 当打开文本文件时点击文件确定时为什么会关闭VI

    labview 当打开文本文件时点击文件确定时为什么会关闭VI
    发表于 09-16 16:53

    二进制文件打开遇上版本问题

    LabVIEW中高版本的二进制文件怎么用低版本LabVIEW打开
    发表于 06-10 13:27

    关于Labview中二进制文件的读写

    程序运行的时候,读取二进制数据到波形图中,发现数据为空,但是当我终止程序之后,再运行程序,读取二进制数据,发现之前
    发表于 09-30 15:03

    求助~二进制文件的读取问题

    `各位大神,我有个后缀为bin的二进制文本文件,数据类型是16位带符号的,我想把数据文件用labview波形文件打开,共16通道,
    发表于 10-17 23:44

    串口发送代码,请问是通过串口调试工具直接发送.bin文件吗?还是发送文本文件啊?

    工具直接发送.bin文件吗?还是把二进制文件打开,把里面的内容拷贝到文本文件.txt里,然后发送文本文件
    发表于 06-11 07:21

    【LabVIEW懒人系列教程-小白入门】1.25LabVIEW文件IO之二进制dat文件读写

    码:c133今日总结① txt文本文件的读写方式②电子表格文件的读写方式今日作业编辑创建文件路径文件
    发表于 08-10 15:22

    C语言入门教程-文本文件

    文本文件 C中的文本文件很简单,不难掌握。所有的文本文件操作函数和相关类型都由stdio库提供。 当您的C程序需要文本输入输出(I/O
    发表于 07-29 11:23 1225次阅读

    C语言入门教程-打开文本文件

    打开文本文件 使用fopen可以打开一个文件。fopen以某种指定模式(最常用的三种模式为r、w和a,分别代表读、写和附加)打开
    发表于 07-29 11:26 1786次阅读

    C语言入门教程-二进制文件

    二进制文件 二进制文件非常类似于结构体数组,只不过这些结构体被保存在一个磁盘文件而非内存数组中。因为是使用磁盘保存
    发表于 07-29 14:24 1866次阅读

    在Linux上分析二进制文件的10种方法

    这将是你进行二进制分析的起点。我们每天都在与文件打交道,并非所有的文件都是可执行类型,除此之外还有各种各样的文件类型。在你开始之前,你需要了解要分析的
    的头像 发表于 06-18 17:32 2874次阅读

    Python-文件操作

    在计算机中,文件是以 **二进制** 的方式保存在磁盘上的* **文本文件 **和** 二进制文件**
    的头像 发表于 02-16 15:42 523次阅读
    Python-<b class='flag-5'>文件</b>操作

    python创建文件对象

    (经常会用!!!) 文本文件对象和二进制文件对象的创建 如果是二进制模式 b ,则创建的是
    的头像 发表于 06-21 17:19 1068次阅读
    python<b class='flag-5'>创建文件</b>对象