zoukankan      html  css  js  c++  java
  • C++——文件的读写

    C++中标准IO库的fstream头文件定义了三种支持文件IO的类型:

    • ifstream,由istream派生而来,提供读文件的功能。
    • ofstream,由ostream派生而来,提供写文件的功能。
    • fstream,由iostream派生而来,提供读写同一个文件的功能。

    一、读文件

    1.定义流对象并绑定文件

    ifstream infile(ifile.c_str());

    上面定义了一个读文件流,提供文件名作为初始化值,相当于打开了特定的文件。

    下面的代码与之等同:

    ifstream infile;
    infile.open(ifile.c_str());

    首先定义一个读文件流,然后调用 open 成员函数将已存在的fstream对象与特定文件绑定。

    文件名使用的是C风格的字符串,而不是C++中的string类型。

    2.检查文件打开是否成功

    检验文件打开是否成功是个好习惯。

    ifstream infile(ifile.c_str());
    if (infile)
    {
    	cout << "Open file successfully." << endl;
    	infile.close();
    }
    else
    {
    	cout << "Can not open file." << endl;
    }

    打开文件之后,就需要开始读文件了,读文件可以有哪些方式呢?

    3.逐词读取

    string strWord;
    while (infile >> strWord)
    {
    	cout << strWord << endl;
    }

    以这种方式读取时,文本以空白符(空格、tab、换行符等)分开,并且空白符都将丢失。

    4.逐行读取(字符数组)

    const int iLineLen = 100;
    char strLine[iLineLen];
    while (infile.getline(strLine, iLineLen))
    {
    	cout << strLine << endl;
    }

    将行读入字符数组,行之间用换行符区分。

    需要注意的是,上面的字符数组长度为100。如果我们读取的行长度大于100会发生什么呢?我试了一下,长度大于100将之间跳出循环,后面的内容就读不了了,具体原因?

    5.逐行读取(字符串)

    string strLine;
    while (getline(infile, strLine))
    {
    	cout << strLine << endl;
    }

    用这种方式读取时就没有上面的长度问题了。

    下面的程序与之等同,使用 eof() 判断是否已经到达文件结尾:

    string strLine;
    while (!infile.eof())
    {
    	getline(infile, strLine);
    	cout << strLine << endl;
    }
    

      

    二、写文件

    1.定义流对象并绑定文件

    与读文件类似,不再赘述。

    2.将内容写入文件

    outfile << "我爱你" << flush;

    用法与cout类似,这段程序首先清空文件,然后将新的内容写进去。

    那么,如何不清空之前文件的内容呢——

    三、文件模式

    打开文件时,无论是调用open还是以文件名作为流初始化的一部分,都需要指定文件模式。如果未指定,则使用默认值。

    可以用位操作符设置一个或多个模式。

    文件模式:

    • in:打开文件做读操作
    • out:打开文件做写操作
    • app:每次写之前找到文件尾(append,也就是在文件末尾加上新的内容)
    • ate:打开文件后,立即将文件定位在文件尾
    • trunc:打开文件时清空已存在的文件流
    • binary:以二进制模式进行IO操作

    比如:

    ofstream outfile(ofile.c_str(), ofstream::app);
    if (outfile)
    {
    	cout << "Open file successfully." << endl;
    	outfile << "我爱你" << flush;	
    }

    上面的程序打开文件时指定模式为app,作用是在文件末尾添加“我爱你”。

  • 相关阅读:
    sublime text 4 vim 插件配置
    ssh-keygen 的使用
    distribution transaction solution
    bilibili 大数据 视频下载 you-get
    Deepin 20.2.1 安装 MS SQL 2019 容器版本
    【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
    【转】You Can Now Use OneDrive in Linux Natively Thanks to Insync
    dotnet 诊断工具安装命令
    Linux 使用 xrandr 设置屏幕分辨率
    【转】CentOS 7.9 2009 ISO 官方原版镜像下载
  • 原文地址:https://www.cnblogs.com/hellovenus/p/cpp_file.html
Copyright © 2011-2022 走看看