目录

打开文件

关闭文件

写入文件

读取文件

二进制 I/O 函数


打开文件

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

FILE *fopen( const char * filename, const char * mode );

其中,filename 是文件名,访问模式 mode 值可以是下列值中的一个:

模式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

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

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

关闭文件

fclose( ) 函数。

 int fclose( FILE *fp );

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

写入文件

fputc() 函数。

int fputc( int c, FILE *fp );

把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,返回写入的字符,如果发生错误,则会返回 EOF

int fputs( const char *s, FILE *fp );

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

#include <stdio.h>int main()
{FILE *fp = NULL;fp = fopen("/tmp/test.txt", "w+");fprintf(fp, "This is testing for fprintf...\n");fputs("This is testing for fputs...\n", fp);fclose(fp);
}

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

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

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

读取文件

fgetc() 函数。

int fgetc( FILE * fp );

从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF

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

从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。

也可以使用 int fscanf(FILE *fp, const char *format, ...) 函数来从文件中读取字符串,但是在遇到第一个空格和换行符时,它会停止读取。

#include <stdio.h>int main()
{FILE *fp = NULL;char buff[255];fp = fopen("/tmp/test.txt", "r");fscanf(fp, "%s", buff);printf("1: %s\n", buff );fgets(buff, 255, (FILE*)fp);printf("2: %s\n", buff );fgets(buff, 255, (FILE*)fp);printf("3: %s\n", buff );fclose(fp);}

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

1: This
2: is testing for fprintf...3: This is testing for fputs...

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

二进制 I/O 函数

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

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

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

C语言的文件读写函数相关推荐

  1. c语言文件写入函数有哪些,c语言文件读写函数有哪些?

    c语言文件读写函数有:"fgetc"和"fputc"(字符读写函数)."fgets"和"fputs"(字符串读写函数). ...

  2. 教你如何运用python实现简单文件读写函数

    这篇文章主要为大家详细介绍了python实现简单文件读写函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 python作为脚本性语言,加上它的简便易用性.会经常当作脚 ...

  3. C语言之文件读写探究(七):随机读写文件

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  4. C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  5. C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  6. C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  7. C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  8. C语言的文件读写操作

    C语言的文件读写操作 初学系统的时候,老师禁止我们用非系统(system primitive)自带的函数,所以,这次就用open, close, read 和 write写了一个可以读入文本文件并把内 ...

  9. C语言中文件定位函数总结

    C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...

  10. C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

最新文章

  1. python如何爬虫网页数据-python网络爬虫爬取网页内容
  2. 大型机,说爱你不容易
  3. helm的作用及v3版本的架构变化概述
  4. 今日arXiv精选 | 46篇EMNLP 2021最新论文
  5. maven-将maven工程打包成可执行jar包
  6. 我是如何学习写一个操作系统(七):进程的同步与信号量
  7. 玩转二叉树 (25 分) 知中序遍历和前序遍历,求做个镜面反转后的层序遍历
  8. java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题
  9. 服务器配置列表在哪个文件夹,FolderMagic
  10. Linux编译安装Apache
  11. 把arduino当AVRISP烧写器Arduino给Arduino烧boot
  12. 抢椅子游戏java_抢椅子游戏作文(精选10篇)
  13. 全新版大学英语综合教程第一册学习笔记(原文及全文翻译)——4 - Tony Trivisonno‘s American Dream(托尼·特里韦索诺的美国梦)
  14. 含不等式的优化设计matlab,基于Matlab的齿轮传动优化设计
  15. 美国高防服务器亿速云,亿速云香港高防裸金属服务器上线,更强悍的计算性能,更安全的DDoS攻击防护...
  16. Owin + WebApi + OAuth2 搭建授权模式(授权码模式 Part I)
  17. Python Keras ValueError: Layer sequential expects 1 input(s), but it received 2 input tensors. 解决方法
  18. 计算机英语缩略词大全,计算机英语缩略语大全
  19. win10解决,你没有权限打开该文件,请向文件的所有者或管理员申请权限
  20. 2.1 法学的历史(一):西方法学的历史

热门文章

  1. android 不限速迅雷,迅雷不限速分享(手机+PC端打包) – 长期更新
  2. VMware使用OVFTool导入虚拟机
  3. 国内外从事CV相关的企业
  4. #开源的ZYNQ+AD936X SDR软件无线电
  5. 无人驾驶虚拟仿真(十五)--障碍物检测与识别1
  6. stm32f107rc使用系统时钟延时不准
  7. Xilinx平台SRIO介绍(汇总篇)
  8. kali linux暴力破解wifi密码
  9. 关于此应用无法在你的电脑上运行的解决方案
  10. FDDB人脸检测测评数据集介绍