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


目录
相关文章
|
1月前
|
定位技术 API Apache
|
API C语言
【C进阶】文件操作(下)(详解--适合初学者入门)(下)
【C进阶】文件操作(下)(详解--适合初学者入门)(下)
|
编译器
C进阶:文件的基础操作(一)
C进阶:文件的基础操作
67 0
|
6月前
|
消息中间件 存储 分布式计算
学习笔记:StructuredStreaming入门(十二)
学习笔记:StructuredStreaming入门(十二)
78 0
|
存储 编译器 数据格式
【C进阶】文件操作(下)(详解--适合初学者入门)(中)
【C进阶】文件操作(下)(详解--适合初学者入门)(中)
|
C语言
C进阶:文件的基础操作(三)
C进阶:文件的基础操作(三)
71 0
|
自然语言处理 编译器 C++
C++模板进阶知识
之前我们讲过模板初阶的知识,讲述了泛型编程、函数模板和一点类模板的知识,本篇我们将讲述一些进阶知识。
54 0
|
存储 安全 编译器
C++学习笔记(一)——入门基础(二)
C++学习笔记(一)——入门基础
C++学习笔记(一)——入门基础(二)
|
存储 SQL 运维
|
开发者 索引
下一篇
无影云桌面