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中的函数,第四种是把每个字符读出来逐个输出,效率较低而且可能会碰到意想不到的问题.

相关推荐
小屁猪qAq7 分钟前
从单例模式说动态链接
c++·单例模式·链接·编译
ghie909012 分钟前
基于MATLAB的多旋翼无人机多机编队仿真实现
开发语言·matlab·无人机
少控科技23 分钟前
QT新手日记026
开发语言·qt
就是有点傻25 分钟前
C#中如何和西门子通信
开发语言·c#
液态不合群29 分钟前
如何提升 C# 应用中的性能
开发语言·算法·c#
布局呆星31 分钟前
面向对象中的封装-继承-多态
开发语言·python
柏林以东_31 分钟前
异常的分类与用法
java·开发语言
专注API从业者36 分钟前
淘宝商品 API 接口架构解析:从请求到详情数据返回的完整链路
java·大数据·开发语言·数据库·架构
木千1 小时前
Qt全屏显示,在顶部工具栏的最右边显示关闭按钮
开发语言·qt
-凌凌漆-1 小时前
【java】java中函数加与不加abstract 的区别
java·开发语言