首页 > 其他分享 >文件操作

文件操作

时间:2022-09-18 17:33:05浏览次数:81  
标签:文件 ifs ios ofs 操作 include open

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放

通过文件可以将数据持久化

C++中对文件操作需要包含头文件 ==< fstream >==

文件类型分为两种:

  1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中
  2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类:

  1. ofstream:写操作
  2. ifstream: 读操作
  3. fstream : 读写操作

5.1文本文件

5.1.1写文件

写文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ofstream ofs;

  3. 打开文件

    ofs.open("文件路径",打开方式);

  4. 写数据

    ofs << "写入的数据";

  5. 关闭文件

    ofs.close()

 

 

注意: 文件打开方式可以配合使用,利用|操作符

**例如:**用二进制方式写文件 ios::binary | ios:: out

 1 #include <iostream>
 2 #include <fstream>//头文件包含
 3 using namespace std;
 4 //文本文件写文件
 5 void test01()
 6 {
 7     //1包含fstream头文件
 8     //2.创建流对象
 9     ofstream ofs;//起名无所谓
10     //3.指定打开的方式
11     ofs.open("test.txt", ios::out);
12     //4.写内容
13     ofs << "姓名:张三" << endl;
14     ofs << "性别:男" << endl;
15     ofs << "年龄:18" << endl;
16     //5.关闭文件
17     ofs.close();
18 }
19 int main()
20 {
21     test01();
22 }

 

 

总结:

  • 文件操作必须包含头文件 fstream
  • 读文件可以利用 ofstream ,或者fstream类
  • 打开文件时候需要指定操作文件的路径,以及打开方式
  • 利用<<可以向文件中写数据
  • 操作完毕,要关闭文件

读文件

读文件与写文件步骤相似,但是读取方式相对于比较多

读文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ifstream ifs;

  3. 打开文件并判断文件是否打开成功

    ifs.open("文件路径",打开方式);

  4. 读数据

    四种方式读取

  5. 关闭文件

    ifs.close();

 1 #include <iostream>
 2 #include <fstream>
 3 #include <string>
 4 using namespace std;
 5 void test01()
 6 {
 7     ifstream ifs;
 8     //打开文件并判断是否打开成功
 9     ifs.open("test.txt", ios::in);
10     if (!ifs.is_open())
11     {
12         cout << "文件打开失败" << endl;
13         return;
14     }
15     //第一种方式
16     //为什么要初始化为0:
17     /*
18      读文件时设置数组大小,
19      一般会设置到一个很大的数超过需要读取的文件大小
20      这个用处就在这,
21      一是保证不会读到之前程序的遗留数据,
22      2是保证能够中止数组(一般不是用while去写入到数组里,保证能读完文件后读到0)
23     */
24     char buf[999] = { 0 };//开辟一个string类型的数组,并将数组初始化全为0,大小为999(只要大于字符的大小即可但是不能使用系统 保留的那几个数)空间
25     while (ifs >> buf)//对ifs读数据,如果读不到了就返回1个假的值,因为数组初始化时全为0了
26     {
27         cout << buf << endl;
28     }
29     //第二种方式
30     //char buf[999] = { 0 };
31     //while (ifs.getline(buf, sizeof(buf)))
32     //{
33     //    cout << buf << endl;
34     //}
35     //第三种
36     //string buf;//只能用string 不能用char
37     //while (getline(ifs, buf))
38     //{
39     //    cout << buf << endl;
40     //}
41     //第四种
42     //char c;
43     //while ((c = ifs.get()) != EOF)//end of file 文件尾标志(不推荐,因为是一个个字符读效率低)
44     //{
45     //    cout << c ;
46     //}
47     ifs.close();
48 }
49 int main()
50 {
51     test01();
52 }

 

 

总结:

  • 读文件可以利用 ifstream ,或者fstream类
  • 利用is_open函数可以判断文件是否打开成功
  • close 关闭文件

 二进制文件

以二进制的方式对文件进行读写操作

打开方式要指定为 ==ios::binary==

5.2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型 :ostream& write(const char * buffer,int len);

参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

 1 #include <iostream>
 2 #include <fstream>
 3 using namespace std;
 4 //二进制文件(不仅能操作系统自定义的数据类型,还能操作自定义的数据类型) 写文件
 5 class person
 6 {
 7 public:
 8     char m_name[64];
 9     int m_age;
10 };
11 void test01()
12 {
13     ofstream ofs("person.txt", ios::out | ios::binary);//也可以这样
14    //可以这样 ofs.open("person.txt",ios::out|ios::binary)
15     person p = { "张三",18 };
16     ofs.write((const char*)&p, sizeof(person));//const 加字符类型表示强制转换成改类型
17     ofs.close();
18 }
19 int main()
20 {
21     test01();
22 }

ps : 预留空间在写文件时预留足,一旦创建了读文件.cpp,超过了写文件时预留的空间就会乱码,且创建了读文件.cpp后还不能去改写文件预留的空间,因为需要重新运行一次写文件.cpp才能更改,但是创建了读文件.cpp后就会只运行读文件.cpp了

总结:

  • 文件输出流对象 可以通过write函数,以二进制方式写数据

 读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:istream& read(char *buffer,int len);

参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

 1 #include <iostream>
 2 #include <fstream>
 3 using namespace std;
 4 class person
 5 {
 6 public:
 7     char m_name[64] = { 0 };
 8     int m_age;
 9 };
10 void test01()
11 {
12     fstream ifs;
13     ifs.open("person.txt", ios::in | ios::binary);
14     if (!ifs.is_open())
15     {
16         cout << "打开文件失败" << endl;
17         return;
18     }
19     person p;
20     ifs.read((char*)&p, sizeof(person));
21     cout << "name:" << p.m_name << endl
22         << "age :" << p.m_age << endl;
23     ifs.close();
24 }
25 int main()
26 {
27     test01();
28 }

 

  • 文件输入流对象 可以通过read函数,以二进制方式读数据

 

标签:文件,ifs,ios,ofs,操作,include,open
From: https://www.cnblogs.com/zaiyewujiang/p/16695032.html

相关文章

  • 操作系统学习笔记13 | 目录与文件系统
    本文完成磁盘管理4层抽象中的最后一层抽象:目录与文件系统。达成的效果是整个磁盘抽象为我们日常所熟悉的目录树,这个树应当能够适配不同的操作系统(是一个独立子系统),通过目......
  • 1-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32通过Air724UG使用http或https下
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLAir724UGA/myota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>......
  • shell编程-文件归档
    需求说明:设置定时任务,每天凌晨1点进行将指定目录(/root/scripts)下文件按照archive_目录名_年月日.tar.gz的格式归档存放到/root/archive路径下。1、编写脚本文件archive_s......
  • redis的配置文件
    redis的配置文件开头INCLUDES(包含)当redis有多个其他配置时就可以使用include来引入,类似spring中的import,如果想要覆盖其中的配置参数需要把include放到最后来设置。......
  • 2. 文件与I/O
    2.文件与I/oopen系统调用close系统调用creat系统调用read系统调用write系统调用open系统调用1函数原型有几种方法可以获得允许访问文件的文件描述符。最......
  • MyBatis配置文件开启驼峰命名
    mybatis-config.xml文件中配置开启<settings><!--配置:开启二级缓存--><!--<settingname="cacheEnabled"value="true"/>--><settingnam......
  • Yoink for Mac(临时文件存储助手)中文
    那么如果你也经常因为屏幕尺寸小,在Mac系统中拖放文件感觉很不方便的话,强烈推荐你试试Yoink这个小程序。Yoink(临时文件存储助手)forMac是一款适用于苹果电脑Macos平......
  • cmd 'node' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    报错:cmd提示:‘node‘不是内部或外部命令,也不是可运行的程序原因:没安装node.js或者没配置好环境变量情况1:安装node.js下载地址:https://nodejs.org/en/安装步骤:默......
  • 使用Android自带文件选择器
    工具类:publicclassUriTofilePath{publicstaticStringgetFilePathByUri(Contextcontext,Uriuri){Stringpath=null;//4.4及之后的......
  • nodejs <a>带参数返回路由标记执行数据库操作
    今天在测试mongo数据库操作维护的时候,测试了一下直接在表内添加操作列来完成数据的删除操作,直接返回数据库ID1、mongo数据操作functiondelStudentid(id,callback){ ......