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;
}
相关推荐
问君能有几多愁~20 分钟前
C++ 数据结构复习笔记
数据结构·c++·笔记
tntxia42 分钟前
C++ 基础教程:从入门到精通
c++
Drone_xjw1 小时前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
熊猫_豆豆4 小时前
QT6 Android C++ 自制美观闹钟
android·c++·qt·闹钟
随意起个昵称5 小时前
状压dp-基础题目2([USACO12MAR] Cows in a Skyscraper G)
c++·算法·动态规划
无限的鲜花6 小时前
协程本质是函数加状态机——零基础深入浅出 C++20 协程
c++·算法·c++20
精明的身影6 小时前
C++自学之路1:Hello world
开发语言·c++
旖-旎6 小时前
《LeetCode 64 最小路径和 || LeetCode 174 地下城游戏》
c++·算法·leetcode·动态规划
森林古猿17 小时前
再论斜率优化
c++·学习·算法
水利行业RTU手艺人7 小时前
RTU固件中的“数据保险箱”——离线数据补发系统设计
c++·stm32·单片机·物联网