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;
}
相关推荐
yyds_yyd_1008611 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
库克克13 小时前
【C++】set 与multiset
开发语言·c++
Mortalbreeze13 小时前
深入 Linux Socket 编程:端口号、网络字节序与 struct sockaddr 详解
linux·服务器·网络·c++
繁星蓝雨15 小时前
C++设计原理——异常处理
java·c++·异常处理·noexcept·throw·try catch
Kurisu_红莉栖15 小时前
关于相关问题的自我回答
c++
hansang_IR15 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
我不管我就要叫小猪15 小时前
C/C++----命名空间
c语言·开发语言·c++
无忧.芙桃16 小时前
数据结构之堆
c语言·数据结构·c++·算法·
2301_7779983417 小时前
Linux线程控制——从线程创建到线程分离(第三部分:线程等待 pthread_join)
linux·运维·服务器·c语言·c++
醉城夜风~17 小时前
C++模板详解:从基础到高级全面解析
java·开发语言·c++