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,作用是在文件末尾添加“我爱你”。

  • 相关阅读:
    职业生涯步步高:一位资深经理人的职业生涯感悟
    HDU2082解题报告
    How the brain recognizes objects
    学习"图"(最短路径)算法
    HDOJ1022解题报告
    【转】受用的十条经验哈
    Archive for the 'TED' Category TED视频:Tan Le 能读懂脑电波的耳机
    WiFi 802.11ac驱动无线家庭高清影院
    asp.net后台编写 loading效果
    c#字符串分割
  • 原文地址:https://www.cnblogs.com/hellovenus/p/cpp_file.html
Copyright © 2011-2022 走看看