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

相关推荐
一点媛艺3 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风3 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生4 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
UestcXiye5 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue5 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang