C++文件操作

目录

文件类型

操作文件的类

文本读写

文件打开方式

读文件

写文件


文件类型

文本文件,文件以ASCII码形式存储在计算机中

二进制文件,文件以文本二进制形式存储在计算机中,用户无法读懂

操作文件的类

ofstream:写操作

ifstream:读操作

fstream:读写操作

文本读写

文件打开方式

ios::in:以读方式打开文件

ios::out:以写方式打开文件

ios::ate:文件打开后,文件指针定位到末尾,可读写(不截断文件)

ios::app:追加方式写文件

ios::trunc:如果文件存在先删除再创建,也就是覆写

ios::binary:二进制方式

读模式下如果文件不存在,会报错。写模式下如果文件不存在,会创建。

读文件

cpp 复制代码
#include<iostream>
#include<string>
#include<fstream>//读写文件的头文件
int main()
{
    std::ifstream ifs;//输入文件流对象
    ifs.open("test.txt",std::ios::in);
    if(!ifs.is_open())
    {
        std::cout<<"文件打开失败!"<<std::endl;
        return -1;
    }
    //第一种方式读
    // char buf[1024]={0};
    // while(ifs>>buf)
    // {
    //     std::cout<<buf<<std::endl;
    // }
    //第二种方式读
    // char buf[1024]={0};
    // while(ifs.getline(buf,sizeof(buf)))
    // {
    //     std::cout<<buf<<std::endl;
    // }
    //第三种方式读
    // std::string buf;
    // while(std::getline(ifs,buf))
    // {
    //     std::cout<<buf<<std::endl;
    // }
    //第四种方式读
    // char c;
    // while((c=ifs.get())!=EOF)
    // {
    //     std::cout<<c;
    // }
    ifs.close();
    //二进制方式读
    // ifs.open("test.txt", std::ios::in | std::ios::binary);
    
    // char buf[1024] = {0};
    // while (ifs.read(buf, sizeof(buf))) // 每次读取sizeof(buf)字节
    // {
    //     std::cout.write(buf, ifs.gcount()); // 输出实际读取的字节数
    // }
    // if (ifs.gcount() > 0) // 处理最后一次不足 sizeof(buf) 的读取
    // {
    //     std::cout.write(buf, ifs.gcount());
    // }
    // ifs.close();
    return 0;
}

写文件

cpp 复制代码
#include<iostream>
#include<string>
#include<fstream>//读写文件的头文件
int main()
{
    std::ofstream ofs;//输出文件流对象
    ofs.open("test.txt",std::ios::out|std::ios::app);//以写方式打开文件
    if(!ofs.is_open())//判断文件是否成功打开
    {
        std::cout<<"文件打开失败!"<<std::endl;
        return -1;
    }
    ofs<<"Hello, World!"<<std::endl;//向文件中写入数据
    ofs.close();//关闭文件
    ofs.open("test.txt",std::ios::out|std::ios::binary|std::ios::app);//以二进制写方式打开文件
    if(!ofs.is_open())//判断文件是否成功打开
    {
        std::cout<<"文件打开失败!"<<std::endl;
        return -1;
    }
    char buffer[]="我爱学习,我爱C++,我爱编程\n";
    //sizeof(buffer)会包含字符串末尾的'\0',若需忽略可改用strlen(buffer)
    ofs.write(buffer,sizeof(buffer));//以二进制方式向文件中写入数据
    ofs.close();//关闭文件
    return 0;
}
相关推荐
南境十里·墨染春水14 分钟前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
一拳一个呆瓜3 小时前
【STL】_SCL_SECURE_NO_WARNINGS
c++·stl
小小编程路4 小时前
C++ 异常 完整讲解
开发语言·c++
Frank学习路上7 小时前
【C++】面试:关键字与语法特性
c++·面试
Irissgwe8 小时前
数据结构-栈和队列
数据结构·c++·c·栈和队列
点云侠8 小时前
PCL 生成三棱锥点云
c++·算法·最小二乘法
.道阻且长.9 小时前
C++ string 操作指南:接口解析
java·c语言·开发语言·c++
laplaya9 小时前
使用 vcpkg 管理 C++ 项目中的依赖
开发语言·c++
blueman888811 小时前
VS2022 切换定义(F12 / Go to Definition)反应慢
c++·visual studio
凡人叶枫11 小时前
Effective C++ 条款35:考虑 virtual 函数以外的其他选择
java·c++·spring