C++读写文本文件 08 20 2024

4.1 写文件

步骤如下:

  1. 包含头文件

    #include<fstream>

  2. 创建流对象:

    ofstream os1;

  3. 打开文件:

    of1.open("path",打开方式);

  4. 输出数据:

    of1<<"data";

  5. 关闭文件:

    of1.close();

打开方式 解释
ios::in 读文件方式打开文件
ios::out 写文件方式打开文件
ios::ate 初始位置为文件尾
ios::app 追加方式写文件(常用)
ios::trunc 如果文件存在,先删除,再创建
ios::binary 二进制方式

**注意:**文件打开方式可以用位或操作符配合使用,如: ios:in | ios:binary

复制代码
#include <fstream>
#include <iostream>
using namespace std;
 
int main ()
{
    
   char data[100];
 
   // 以写模式打开文件
   ofstream outfile;
   outfile.open("afile.dat");
 
   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);
 
   // 向文件写入用户输入的数据
   outfile << data << endl;
 
   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // 再次向文件写入用户输入的数据
   outfile << data << endl;
 
   // 关闭打开的文件
   outfile.close();
 
   // 以读模式打开文件
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 
 
   // 在屏幕上写入数据
   cout << data << endl;
   
   // 再次从文件读取数据,并显示它
   infile >> data; 
   cout << data << endl; 
 
   // 关闭打开的文件
   infile.close();
 
   return 0;
}

4.2 读文件

步骤如下:

  1. 包含头文件

    #include<fstream>

  2. 创建流对象:

    ifstream ifs1;

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

    ifs1.open("path",打开方式);

  4. 读数据:

    四种方式读取;

  5. 关闭文件:

    ifs1.close();

复制代码
#include<iostream>
#include<fstream>
void test01()
{
    ifstream ifs;
    ifs.open("test.txt",ios::in);
    //如果打开失败
    if(!ifs.isopen())
    {
        cout<<"文件打开失败"<<endl;
        return;
    }
    //读数据
    //第一种方式:将所有的空格当做终止条件,没有办法输出空格信息了,空格都被endl回车代替了
    char buff[1024] = { 0 };
    while (ifs >> buff)
    {
        cout << buff<<endl;
    }
    //第二种方式:利用<string>中getline函数 包含头文件<string>
    string buff;
    while(getline(ifs,buff))
    {
        cout<<buff<<endl;
    }
    //第三种方式:利用ifs对象的getline方法来实现
    char buff[1024]={0};
    while(ifs.getline(buff,sizeof(buff)))
    {
        cout<<buff<<endl;
    }
    //第四种方式:字符逐个读取,不用考虑回车换行的问题,因为文件中的\n被读取出来之后输出到控制台上自动就换行了,利用fin.get()函数,这个函数的返回值是它读取到的字符,当遇到EOF的时候返回EOF,通过判断跳出while循环
    char buff = 'a';//随便给字符buff赋初始值
    while((buff=ifs.get()) != EOF)
    {
        cout<<buff;
    }
    //关闭文件
    ifs.close();
}

总结:第一种方法无法读取空格,第二种方法和第三种方法按行读取,一个是string库中的函数,一个是istream中的函数,第四种是把每个字符读出来逐个输出,效率较低而且可能会碰到意想不到的问题.

相关推荐
AstartesEternal1 分钟前
python第二次作业(列表,字典)
开发语言·python
zh路西法2 分钟前
【Navigation2进阶】(十二):自主探索性能优化与 RIG 算法推导与 Nav2 插件实现
c++·dijkstra·ros2·rrt·navigation2·前沿探索
星恒随风10 分钟前
C++ STL 详解:set 与 multiset 的使用、区间查询和算法应用
开发语言·c++·笔记·学习·算法
数聚天成DeepSData17 分钟前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理
再卷也是菜19 分钟前
C++11支持并发库
开发语言·c++
Lhan.zzZ22 分钟前
QML 开发中的“陷阱”:动态模型更新时,ComboBox 索引为何总是失效?
开发语言·qt
小园子的小菜37 分钟前
Java 并发四大工具类深度解析:CountDownLatch、CyclicBarrier、Semaphore、Exchanger 原理、源码与面试考点
java·开发语言·面试
六月的翅膀1 小时前
OCR:RapidOCR C++/C#
c++·ocr
游戏开发爱好者81 小时前
iOS应用加固方案全解析:源码加固与IPA在线加固对比
android·macos·ios·小程序·uni-app·cocoa·iphone
河西石头1 小时前
再谈C#的抽象类和接口:从“适配器”到“毛坯房”的设计哲学
开发语言·c#·接口·依赖注入·抽象类·依赖倒挂