首页 > 编程语言 >C++文件读写常用操作整理

C++文件读写常用操作整理

时间:2023-05-01 21:56:14浏览次数:32  
标签:文件 常用 ifs int 读写 ios C++ include open

C++对于文件的操作需要包含<fstream>头文件

文件类型分为两种:

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

操作文件的三大类:

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

一、文本文件

1. 写文件

  1. 包含头文件
  2. 创建流对象
  3. 打开文件
  4. 写数据
  5. 关闭文件

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

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

这里说明一下,打开文件的时候下面两种方式都是可以的:

    // 创建流对象
    ofstream ofs;
    // 指定文件名和打开方式
    ofs.open("output.txt", ios::out);  // 这里如果文件不存在会自动创建

   // 创建流对象,指定文件名和打开方式
    ofstream ofs("output.txt", ios::out);
#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 创建流对象
    ofstream ofs;

    // 指定文件名和打开方式
    ofs.open("output.txt", ios::out);  // 这里如果文件不存在会自动创建

    // 写内容
    ofs << "Hello World" << endl;

    ofs.close();
    return 0;
}

2. 读文件

  1. 包含头文件

  2. 创建流对象

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

    ifstreamis_open()方法可以判断文件是否打开成功

  4. 写数据

  5. 关闭文件

读取上一步的output.txt 文件

方式一:

遇到空格会认为一次读取结束

输出结果:

Hello
World
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    // 创建流对象
    ifstream ifs;

    // 打开文件并判断是否打开成功
    ifs.open("output.txt", ios::in);

    // 文件打开失败一般来说就是路径写错了或者文件名错了
    if(!ifs.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }

    // 读数据
    // 方式一
    char buf[1024] = {};
    // 这种方式遇到空格也会停止
    while(ifs >> buf) {
        cout << buf << endl;
    }

    ifs.close();
    return 0;
}

方式二:

输出结果:

Hello World
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    // 创建流对象
    ifstream ifs;

    // 打开文件并判断是否打开成功
    ifs.open("output.txt", ios::in);

    // 文件打开失败一般来说就是路径写错了或者文件名错了
    if(!ifs.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }

    // 方式二
    char buf[1024] = {};
    while(ifs.getline(buf, sizeof(buf))) {
        cout << buf << endl;
    }

    ifs.close();
    return 0;
}

方式三:

读到string

输出结果:

Hello World
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    // 创建流对象
    ifstream ifs;

    // 打开文件并判断是否打开成功
    ifs.open("output.txt", ios::in);

    // 文件打开失败一般来说就是路径写错了或者文件名错了
    if(!ifs.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }

    // 读数据
    // 方式三
    string buf;
    while(getline(ifs, buf)) {
        cout << buf << endl;
    }

    ifs.close();
    return 0;
}

方式四:不推荐

一个字符一个字符读

输出结果:

Hello World
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    // 创建流对象
    ifstream ifs;

    // 打开文件并判断是否打开成功
    ifs.open("output.txt", ios::in);

    // 文件打开失败一般来说就是路径写错了或者文件名错了
    if(!ifs.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }

    // 读数据
    // 方式四
    char ch;
    while((ch = ifs.get()) != -1) {
        cout << ch;
    }

    ifs.close();
    return 0;
}

二、二进制文件

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

打开方式指定为ios::binary

1. 写文件

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

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

字符指针buffer指向内存中的一段存储空间,len是读写的字节数

可以操作内置的数据类型,也可以操作自定义的数据类型

注意:写字符串的时候尽量不要用string,可能会出现一些问题,最好是用char[]

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Person {
public:
    char name[64];
    int age;
};

int main() {
    // 创建流对象
    ofstream ofs("person.txt", ios::out | ios::binary);
    // 写文件
    Person person = { "张三", 20 };
    ofs.write((const char *)&person, sizeof(Person));

    // 关闭
    ofs.close();
    
    return 0;
}

2. 读文件:

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

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

字符指针buffer指向内存中的一段存储空间,len是读写的字节数

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Person {
public:
    char name[64];
    int age;
};

int main() {
    // 创建流对象与打开文件并判断文件是否打开成功
    ifstream ifs("person.txt", ios::in | ios::binary);

    if(!ifs.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }

    // 读文件
    Person p;
    ifs.read((char *)&p, sizeof(Person));

    cout << p.name << " " << p.age << endl;

    // 关闭
    ifs.close();
    
    return 0;
}

标签:文件,常用,ifs,int,读写,ios,C++,include,open
From: https://www.cnblogs.com/junlin623/p/17367066.html

相关文章

  • C++杂谈:STL
    五一快乐。终于有时间整理一点东西了,笔者这个五一过得是相当初生。大部分人都玩去了,只有我还在赶ddl的世界达成了qwq。不过我觉得还是做了自己想做的事情的。稍微记录一些前段时间OOP遇到的STL里面乱七八糟的东西。STL的一些底层实现vector这个谁都知道,是一个堆上分配的数组,......
  • c++ 调用函数,编译器查找函数过程
    假设此处调用函数 inta=1;floatb=1.0;func(a,b);//调用函数若func为非模板函数,编译器查找所有的名称为func的函数,然后检查函数入参的数量,再然后检查每个入参是否都可以转换到目标类型。(此处注意,如果参数类型为类对象,若该类支持隐式转换,那么会出现如下情况:classT......
  • c++回调函数
    回调函数本质上也是普通函数,只是调用机制有所区别——首先通过传参的形式将该函数的地址传递给其他函数,然后在其他函数中通过函数指针调用该函数。在其他函数中通过函数指针调用该函数的过程称为回调,而作为被调用的该函数则被称为回调函数。为什么需要回调函数?满足接口兼容性回......
  • MongoDB【常用命令】
    目录 1:基本常用命令1.1:演示案例1.2:数据库操作1.2.1:选择和创建数据库,查看当前正在使用的数据库命令1.2.2:数据库的删除1.3:集合操作1.3.1:集合的显式创建(了解)1.3.2:集合的隐式创建1.3.3:集合的删除1.4:文档基本CRUD1.4.1:文档的插入1.4.2:文档的基本查询1.4.3:文档的更新1.4.4:删除文档1.5:文......
  • 10分钟搞定!C++类中构造函数和析构函数的完全指南
    一、初步认识构造函数1.什么是构造函数?要了解构造函数就要先了解一下,类的6个默认成员函数,如下图:构造函数:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有一个合适的初始值,并且在对象整个生命周期内只调用一次。通俗一点来......
  • linux 常用命令
    ssh登录:[email protected]上传文件:scp-P11022/d/tmp/[email protected]:/home/program如是windowsscp-P11022 d:/tmp/[email protected]:/home/program下载文件:scp-P11022 [email protected]:/home/program /d/tmp/sim.data如是win......
  • 在Android中实现文件读写
    android实现下载文件/***从网上下载*@paramurl下载路径*@paramoutputFile创建本地保存流的文件*@return*@return下载失败返回1(比如没有网络等情况)下载成功返回0*/publicstaticintdownloadFile(Stri......
  • 【c++】libtorch和qt和opencv部署
    https://blog.csdn.net/rglkt/article/details/125508634opencv和libtorch的兼容问题,只需要下载(cxx11ABI)即可关于slot报错问题:引入torch文件时使用这种办法#undefslots#include<torch/torch.h>#include<torch/script.h>#defineslotsQ_SLOTS命名空间的问题参......
  • Docker CLI docker compose port常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • linux的基础结构和常用的命令基本 Linux 命令的列表:
    linux的基础结构和常用的命令基本Linux命令的列表: Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础......