对文件的各种操作详解 2

简介: 对文件的各种操作详解

2.fgets和fputs

2.1认识fgets和fputs

fgets的作用是从流中读取字符串,并将其存放到指定的字符数组中    它有三个参数,第一个是用来储存从流中读取到的字符串的变量,第二个参数num的含义指的是最多只能够从中取出num-1个字符,这里笔者认为是因为fgets这个函数它会自动地在取得的字符后加'\0',因为没有'\0'的话,这个也就不能被称为字符串了,它在打印的过程中就会打印出一系列的随机值直到遇到'\0'才会停下。所以把'\0'也算上的话就是取出num大小的字符串。第三个参数则是对应的流,你想从哪儿取数据出来,就传哪儿的流。fgets返回的值类型为一个字符型指针,如果传字符串成功它会返回str的地址,失败则返回NULL


fputs的作用则是将字符串放进对应的流中    它的参数很简单就两个,一个是你要放进去的字符串的地址,一个是被放入的流fputs如果成功写入数据,它的返回值为一个正数,如果写入失败,它的返回值则为一个负数。


2.2使用fgets和fputs

老样子,我们先用fputs往文件中存放一个字符串,存放之前文件已被清空。


28a6b9719b97465da8d9ad371a39fe90.png


代码如下:

#include<stdio.h>
int main()
{
  FILE* pf = fopen("abcd.txt", "w");
  if (pf == NULL)
  {
    perror("fopen");
    return 1;
  }
  fputs("今天天气真好", pf);
  //将这个字符串写进abcd.txt中
  fclose(pf);
  pf = NULL;
}

运行结果如下:


a5c60e8007194116b4dc2f6afe1db27c.png


由于一个汉字占两个字节,不好展示fgets,所以我们在这个文件中随便存放一些字母,并通过fgets把它们取出,在abcd.txt中存放I am a student,并使用fgets从中取6个字符(不算'\0'),并将其打印



1e34ece9805f46dab319edc67a453aa3.png

运行结果如下:

6d2274122cad46b3b1ef8e66bdb87fae.png

确实取出了六个字符,给str写很多个x,并通过监视观察

dfb2c1b6097341aca4340befd9afb80f.png

确实是将'\0'也存放进去了。


8128cf8047e141e4bfcc6cf5b7d3845d.png


3.fread和fwrite

3.1认识fread和fwrite

244905a5626b4c0a813a9c66a632f570.png

b770391b50fc4f309ad150cce7cb40f0.png


fread的作用是以二进制的形式从流中读取count个大小为size的内容并将内容存放到ptr中。


fwrite的作用是以二进制的形式将count个大小为size的内容从ptr中取出,并放进对应的流中。


3.2使用fread和fwrite

老样子,先使用fwrite对文件的内容进行修改,文件中是没有任何内容的

ada7639c45c147628a2e7daa3202c26c.png

代码如下:

#include<stdio.h>
struct abc
{
  int a;
  float b;
};//创建一个名字为struct abc类型的结构体
int main()
{
  FILE* pf = fopen("abcd.txt","wb");
  if (pf == NULL)
  {
    perror("fopen");
    //错误警告
    return 1;
  }
  struct abc a1 = { 100,3.14f };
  fwrite(&a1,sizeof(struct abc),1,pf);
  //将1个大小为struct abc的写进pf中
  fclose(pf);//关闭文件
  pf = NULL;//将野指针置为空指针
}

运行程序,结果如下:


61c54a3f733e473aaa05290886816a81.png


我去,这是啥啊这是,看不懂啊,我们存的不是100和3.14吗。不要大惊小怪,之所以会看不懂,那是因为我们储存的信息是二进制信息,我们将这其中的信息以二进制的方式存放到了abcd.txt这个文件中。


使用fread,以二进制的形式读取数据,文件中的内容还是之前存放的二进制数据


5efbbefda4ac46069d6a2d49d95d5e8f.png


代码如下:

#include<stdio.h>
struct abc
{
  int a;
  float b;
};//创建一个名字为struct abc类型的结构体
int main()
{
  FILE* pf = fopen("abcd.txt", "rb");
  //以二进制只读的方式打开一个名为abcd.txt的文件
  if (pf == NULL)
  {
    perror("fopen");
    return 1;
  }
  struct abc a1 = {0};
  fread(&a1, sizeof(struct abc), 1, pf);
  //以二进制的方式将1个大小为struct abc的内容从pf所指向的指针内容中取出,放在a1这个结构体中
  printf("%d %f", a1.a, a1.b);
  //将内容打印出来
  fclose(pf);
  pf = NULL;
}


运行结果如下:

0420ce742f0d4969aa6b0da96a4ca007.png

fread成功地将二进制信息转换成了我们需要的内容。


相关文章
|
5月前
|
Linux
仅同步最近5分钟的文件如何操作
【6月更文挑战第28天】仅同步最近5分钟的文件如何操作
23 0
|
6月前
|
存储 文件存储
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
42 1
|
6月前
如何批量复制多个文件到多个目录中(批量复制文件,多对多文件高效操作的方法)
该文介绍了如何使用一个工具进行文件批量复制的操作。首先,提供了百度网盘和蓝奏云的链接,附有提取码,以获取所需工具。接着,展示了一个包含三个文件夹和两张图片的示例。操作步骤包括:打开工具,使用Ctrl+5进入批量复制模块,选择图片并拖拽至复制区域,然后选择目标文件夹(在这里是三个命名的空文件夹),点击“开始复制”,等待过程完成。工具提供复制选项供用户按需选择,且支持保存操作路径以备后续使用。完成后,目标文件夹将包含复制的图片,整个过程简便快捷。
|
存储 iOS开发 C++
C++文件 I/O操作
C++文件 I/O操作
59 0
|
Linux 编译器 C语言
关于文件的操作
关于文件的操作
|
C语言
对文件的各种操作详解 3
对文件的各种操作详解
|
C语言 C++
对文件的各种操作详解 1
对文件的各种操作详解
目录的操作
目录的操作
101 0
|
开发者 Python Windows
文件的读取方式 | 学习笔记
快速学习 文件的读取方式
文件的读取方式 | 学习笔记
|
存储 C++
C++中txt文件的读、写操作介绍
C++中txt文件的读、写操作介绍
438 0