C++文件操作

文章目录

零、文件操作的概念

一、文本文件

1.写文本文件

1.文件打开方式

2.步骤

3.代码

cpp 复制代码
//文本文件 : 写文件
#include <iostream>
#include <fstream> //1.包含头文件
using namespace std;

int main(){
    //2.创建流对象
    ofstream ofs;
    //3.指定打开方式 : 写文件
    ofs.open("text.txt",ios::out);
    //4.写内容
    ofs << "HelloWorld!" << endl;
    ofs << "I'm Edward! A great programmer in the future!" << endl;
    //5.关闭文件
    ofs.close();

    return 0;
}

2.读文本文件 (4种方法)

1.步骤

2.四种读文件方式

(1)字符数组

cpp 复制代码
char buf[1024] = {0};
while(ifs >> buf){
    cout << buf << endl;  //每个单词作为一行读进程序
}

(2)getline

cpp 复制代码
char buf[1024] = {0};
while(ifs.getline(buf,sizeof(buf))){
    cout << buf << endl;
}

(3)string + getline

cpp 复制代码
string buf;
while(getline(ifs,buf)){
    cout << buf << endl;
}

(4)单个字符读取,效率低,不推荐

cpp 复制代码
char c;
while( (c = ifs.get()) != EOF){
    cout << c;
}

3.完整代码

注意先将上一节写好的文件,复制到指定位置才能读取文件

cpp 复制代码
//文本文件 : 读文件
#include <iostream>
#include <fstream>   //1.包含头文件
#include <string>
using namespace std;

int main(){
    //2.创建流对象
    ifstream ifs;
    //3.打开文件,并判断是否打开成功
    ifs.open("text.txt",ios::in);
    if(!ifs.is_open()){
        cout << "文件打开失败" << endl;
        return 0;
    }
    //4.读数据 (四种方式)
     //①第一种
//    char buf[1024] = {0};
//    while(ifs >> buf){
//        cout << buf << endl;  //每个单词作为一行读进程序
//    }
     //②第二种
//    char buf[1024] = {0};
//    while(ifs.getline(buf,sizeof(buf))){
//        cout << buf << endl;
//    }
     //③第三种
//    string buf;
//    while(getline(ifs,buf)){
//        cout << buf << endl;
//    }
     //④第四种:一个字符一个字符读,效率低
    char c;
    while( (c = ifs.get()) != EOF){
        cout << c;
    }
    //5.关闭文件
    ifs.close();
    return 0;
}

4.总结

二、二进制文件

1.写二进制文件

1.关键步骤

cpp 复制代码
ofs.write( (const char *)&p, sizeof(p));

2.完整代码:

运行成功后,自己到程序所在同级目录找到,写好的文件。

cpp 复制代码
//写二进制文件
#include <iostream>
#include <fstream>  //1.包含头文件
using namespace std;

class Person{
public:
    char m_Name[64];
    int m_Age;
};

int main(){
    //2.创建流对象
    ofstream ofs;
    //3.打开文件
    ofs.open("person.txt",ios::out | ios::binary); //二进制方式写文件
    //4.写文件
    Person p = {"Edward",25};
    ofs.write( (const char *)&p, sizeof(Person)); //Person * 强转为 const char *
    //5.关闭文件
    ofs.close();
    return 0;
}

3.补充

②创建流对象 + ③打开文件,可以合并为一步:

cpp 复制代码
ofstream ofs("person.txt",ios::out | ios::binary);

4.举例:把pdf文件的数据 用二进制方式 写入内存缓冲区buffer

ofstream对象命名为outfile,创建流对象和打开文件合并为一步

cpp 复制代码
#include <fstream>
using namespace std;

ofstream outfile("/home/edward/YR/out.pdf", ios::binary);
outfile.write( buffer, length );

2.读二进制文件

1.关键步骤

cpp 复制代码
ifs.read( (char *)&p, sizeof(p));

2.完整代码

同样,需要把上一节写好的二进制文件,放到本程序的同级目录下

cpp 复制代码
//二进制读文件
#include <iostream>
#include <fstream>  //1.包含头文件
using namespace std;

class Person{
public:
    char m_Name[64];
    int m_Age;
};

int main(){
    //2.创建流对象
    ifstream ifs;
    //3.打开文件并判断
    ifs.open("person.txt",ios::in | ios::binary);
    if( !ifs.is_open()){
        cout << "文件打开失败" << endl;
        return 0;
    }
    //4.读文件
    Person p;
    ifs.read( (char*)&p, sizeof(Person));
    cout << "姓名: " << p.m_Name << endl << "年龄: " << p.m_Age << endl;
    //5.关闭文件
    ifs.close();

    return 0;
}

3.总结

相关推荐
moringlightyn28 分钟前
c++11可变模版参数 emplace接口 新的类功能 lambda 包装器
开发语言·c++·笔记·其他·c++11·lambda·包装器
郝学胜-神的一滴32 分钟前
使用Linux系统函数递归遍历指定目录
linux·运维·服务器·开发语言·c++·软件工程
会开花的二叉树2 小时前
C++微服务 UserServer 设计与实现
开发语言·c++·微服务
我星期八休息2 小时前
C++智能指针全面解析:原理、使用场景与最佳实践
java·大数据·开发语言·jvm·c++·人工智能·python
·白小白2 小时前
力扣(LeetCode) ——11.盛水最多的容器(C++)
c++·算法·leetcode
深思慎考3 小时前
RabbitMQ 入门:基于 AMQP-CPP 的 C++ 实践指南与二次封装
开发语言·c++·分布式·rabbitmq·api
深思慎考3 小时前
Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)
c++·ubuntu·rabbitmq·github·rabbitmqpp
草莓熊Lotso4 小时前
《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
前端·c++·python·dubbo
东巴图4 小时前
分解如何利用c++修复小程序的BUG
开发语言·c++·bug
祁同伟.4 小时前
【C++】二叉搜索树(图码详解)
开发语言·数据结构·c++·容器·stl