C进阶:文件的基础操作(二)

简介: C进阶:文件的基础操作(二)

2.流的概念

可以看到流其实是一个极其抽象的概念,我们可以把它理解成C程序与外部设备进行交流的一个媒介;

3.字符的读与写  fgetc 与 fputc

字符的读取函数 fgetc :

1.参数 FILE *stream :这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流;

2.返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF

字符的写入函数 fputc

1.描述 :把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动;

2.参数 int char :这是要被写入的字符。该字符以其ASCII 值进行传递;

3.参数 FILE *stream : 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流;

4.返回值:该函数以无符号 char 强制转换为 int 的形式(即字符的ASCII值)返回写入的字符,如果发生错误则返回 EOF。

实例:

1. int main()
2. {
3.  FILE* pf = fopen("test.txt", "w");  //以只写的方式打开文件
4.  if (pf == NULL)
5.  {
6.    perror("fopen");
7.    return 0;
8.  }
9.  char ch = 0;
10.   for (ch = 'a'; ch <= 'z'; ch++)   //向文件写入26个小写英文字母
11.   {
12.     fputc(ch, pf);
13.   }
14.   fclose(pf);
15.   pf = NULL;
16.   FILE *pfread = fopen("test.txt", "r");  //以只读的方式打开文件
17.   if (pfread == NULL)
18.   {
19.     perror("fopen");
20.     return 0;
21.   }
22.   while (ch!= EOF)   //判断是否读取到文件末尾
23.   {
24.     ch = fgetc(pfread);   //从文件中读取字符
25.     printf("%c", ch);   //打印读取道德字符
26.   }
27.   fclose(pfread);
28.   pfread = NULL;
29.   return 0;
30. }

打印结果:


4.文本行的读与写  fgets 与 fputs

 文本行的读取 fgets

1.描述: 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。

当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定;

2.参数 char *str :这是指向一个字符数组的指针,该数组存储了要读取的字符串;

3.参数 int n : 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度;

4.参数 FILE *stream :这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流;

5.返回值:如果成功,该函数返回相同的 str 参数

如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针

如果发生错误,返回一个空指针

文本行的写入 fputs

1.描述:把字符串写入到指定的流 stream 中,但不包括 '\0'

2.参数  const char *str  : 这是一个数组,包含了要写入的以 '\0' 终止的字符序列;

3.参数 FILE *stream : 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流;

4.返回值:该函数返回一个非负值,如果发生错误则返回 EOF

实例:

1. int main()
2. {
3.  char str[] = "abcdefg";
4.  FILE* pf = fopen("test.txt", "w");   //以只写的方式打开文件
5.  if (pf == NULL)  //判断是否打开成功
6.  {
7.    perror("fopen");
8.    return 0;
9.  }
10.   fputs(str, pf);  //向文件中写入 str
11.   fclose(pf);
12.   pf = NULL;
13.   FILE* pfread = fopen("test.txt", "r");  //以只读的方式打开文件
14.   if (pfread == NULL)  //判断时候打开成功
15.   {
16.     perror("fopen");
17.     return 0;
18.   }
19.   char tmp[20] = { 0 };
20.   printf("%s\n", fgets(tmp, 20, pfread));   //将读取到的字符串存入 tmp 中,并打印
21.   fclose(pfread);  //关闭文件
22.   pfread = NULL;
23.   return 0;
24. 
25. }

打印结果:

5.二进制的读与写   fread 与 fwrite

二进制的读取 fread :

1.描述:从给定流 stream 读取数据到 ptr 所指向的数组中;

2.参数 void *ptr :这是指向带有最小尺寸 size*nmemb 字节的内存块的指针;

3.参数 size_t size :这是要读取的每个元素的大小,以字节为单位

4.参数 size_t nmemb :这是元素的个数,每个元素的大小为 size 字节;

5.参数 FILE *stream : 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流;

6.返回值 :成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾,即如果返回值小于元素个数 ,则发生了错误或读到文件末尾。


目录
相关文章
|
机器学习/深度学习 物联网 开发者
秒级生图,SDXL-turbo、LCM-SDXL魔搭社区最佳实践
最近一个月,快速生图成为文生图领域的热点,其中比较典型的两种方式的代表模型分别为SDXL-turbo 和 LCM-SDXL。
|
机器学习/深度学习 算法 数据建模
【机器学习基础】决策树(Decision Tree)
【机器学习基础】决策树(Decision Tree)
333 0
|
11月前
|
机器学习/深度学习 人工智能 5G
5G天线设计的关键要点解析
5G天线设计的关键要点解析
460 64
|
存储 NoSQL Java
【面试宝藏】Redis 常见面试题解析
Redis 是内存数据结构存储系统,用作数据库、缓存和消息中间件,支持字符串、哈希、列表等数据类型。它的优点包括高性能、原子操作、持久化和复制。相比 Memcached,Redis 提供数据持久化、丰富数据结构和发布/订阅功能。Redis 采用单线程模型,但通过 I/O 多路复用处理高并发。常见的面试问题涉及持久化机制、过期键删除、回收策略、集群和客户端等。
323 4
|
8月前
带动态星空的404页面模板
带动态星空的404页面模板
335 19
|
9月前
|
存储 缓存 监控
后端性能优化:从理论到实践
在数字化时代,后端服务的性能直接影响着用户体验和业务效率。本文将深入探讨后端性能优化的重要性,分析常见的性能瓶颈,并提出一系列切实可行的优化策略。我们将从代码层面、数据库管理、缓存机制以及系统架构设计等多个维度出发,结合具体案例,详细阐述如何通过技术手段提升后端服务的响应速度和处理能力。此外,文章还将介绍一些先进的监控工具和方法,帮助开发者及时发现并解决性能问题。无论是初创公司还是大型企业,本文提供的策略都有助于构建更加高效、稳定的后端服务体系。
314 3
|
KVM 虚拟化
KVM虚拟机的桥接网络
文章主要介绍了KVM虚拟机的NAT和桥接网络类型的工作原理、配置方法以及如何进行网络模式的切换。
371 3
KVM虚拟机的桥接网络
|
消息中间件 存储 关系型数据库
实时计算 Flink版产品使用问题之同步时,上游批量删除大量数据(如20万条),如何提高删除效率
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
容器
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——专有版操作步骤
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——专有版操作步骤自制脑图
216 1
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——专有版操作步骤
|
弹性计算 负载均衡 安全
ACP 知识点总结
ACP 知识点总结
547 5