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 参数不同,则可能发生了一个错误或者到达了文件末尾,即如果返回值小于元素个数 ,则发生了错误或读到文件末尾。


目录
相关文章
|
监控 Linux Shell
(二)Linux命令行工具进阶:探索高级功能
在Linux系统中,命令行工具提供了丰富的高级功能,用于处理文本、管理进程、监控系统性能等任务。本文将深入探讨一些高级命令和技巧,帮助您更加高效地利用Linux命令行。
97 1
|
编译器
【C进阶】文件操作(下)(详解--适合初学者入门)(上)
【C进阶】文件操作(下)(详解--适合初学者入门)(上)
|
5月前
|
消息中间件 运维 监控
Linux命令lsipc:深入解析与实战应用
`lsipc` (通常指 `ipcs`) 是Linux命令,用于查看系统中的IPC资源,包括消息队列、信号量和共享内存。它显示详细信息,支持过滤,并且需要相应权限。示例用法:显示共享内存(`-m`)、查询消息队列(`-q -i ID`)、查看关联进程(`-m -p`)。注意权限、操作影响及定期监控。结合`ipcrm`等工具可进行更深入管理。
|
6月前
|
C++ 数据格式
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
|
API C语言
【C进阶】文件操作(下)(详解--适合初学者入门)(下)
【C进阶】文件操作(下)(详解--适合初学者入门)(下)
|
编译器
C进阶:文件的基础操作(一)
C进阶:文件的基础操作
69 0
|
存储 编译器 数据格式
【C进阶】文件操作(下)(详解--适合初学者入门)(中)
【C进阶】文件操作(下)(详解--适合初学者入门)(中)
|
C语言
C进阶:文件的基础操作(三)
C进阶:文件的基础操作(三)
72 0
|
存储 Linux
动手实战-Linux磁盘管理入门深入解析动手实操
通过学习认识linux磁盘基本管理命令
126 0
动手实战-Linux磁盘管理入门深入解析动手实操
|
存储 缓存 安全
Linux系统开发: 命令进阶学习(一)
Linux系统开发: 命令进阶学习(一)
303 0
Linux系统开发: 命令进阶学习(一)
下一篇
无影云桌面