【问题标题】:Where should I use iostream class?我应该在哪里使用 iostream 类?
【发布时间】:2011-06-01 00:38:31
【问题描述】:

正如我们在 C++ 中所知道的,我们有类 iostream,它继承自 istream(basic_istream) 和 ostream (basic_ostream)。在您可以找到的每一本 C++ 书籍中,您都可以使用 iostream 类对象读取和写入同一个流。但我真的没有看到任何解释或例子来理解我为什么要使用这种奇怪的想法。我真的不知道为什么我需要写入某个流而不是从中读取:(。

你能解释一下我什么时候需要这种结构吗?我认为使用这种构造肯定有严重的理由(不要忘记,仅对于 iostream 声明,我们才使用虚拟继承和多重继承)。

此外,当我尝试编写一个使用 fsteram(iostream 的衍生物)的简单代码时,我发现它无法正常工作,这是我所期望的。这是我的代码:

#include <fstream>
using namespace std;
int  main()
{
    fstream fstr("somefile.txt",fstream::in|fstream::out);//fstream is deriveted from iosteram
    int n;
    fstr>>n;//reading n (WORKS FINE !!!).

    fstr.flush();

    //trying to print Hello to the same file
    fstr<<"Hello"<<endl;// NOT WORKING!!!!!!!

    fstr.flush();

    return 0;
}

那么你能告诉我为什么这段代码可以从文件中读取而不能写东西吗???

简历: 请告诉我为什么我们需要类 iosteram 以及为什么 isteram 和 ostream 不够用以及如何使用它。

感谢和抱歉我的英语:)。

附:可能这个问题太原始了,但请回答我。

编辑:我的代码现在可以工作了。感谢穆尔卡。

【问题讨论】:

    标签: c++ stream iostream


    【解决方案1】:

    IIRC 你需要先搜索一下才能写,不要问为什么。 还添加了代码以清除它可能引发的任何标志。

    #include <fstream>
    using namespace std;
    int  main()
    {
        fstream fstr("somefile.txt",fstream::in|fstream::out);//fstream is deriveted from iosteram
        int n;
        fstr>>n;//reading n (WORKS FINE !!!).
    
        fstr.clear();     //Clear any errors, eof, etc.
        fstr.seekg(0, ios::beg);  //Seek to beginning of file
        fstr.flush();
    
        //trying to print Hello to the same file
        fstr<<"Hello"<<endl;// NOW WORKS!!!
    
        fstr.flush();
    
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      为什么我需要阅读能力和 同时写入文件?

      更新或编辑现有文件的程序可能需要这种能力:它必须读取已经存在的内容,找到要更新或编辑的部分,并且必须编写更新(更改)到文件中。

      【讨论】:

      • 好的,你能告诉我在我的例子中我做错了什么吗?您也不认为拥有 2 个对象 ifstream 和 ofstream 更合乎逻辑。如果这是一个解释,我认为 fstream 是不需要的。也许 iostream 不是无用的,因为使用套接字作为流对我来说听起来不错,但对于文件,我认为使用 ifstream 和 ofstream 更好
      【解决方案3】:

      您可能希望读取和写入同一流,因为该流执行类型转换,例如 std::stringstream。您还可以对允许读取和写入的数据源进行 iostream 抽象,例如套接字或内存缓冲区。

      【讨论】:

      • 好的,你能解释一下为什么我需要 fstream 以及我在代码中做错了什么吗?
      • @Ashot:如果您想询问一般的 iostream,请提出一个问题。如果您想询问有关 fstream 的特定代码,请打开另一个问题。两者没有关系。
      【解决方案4】:

      什么时候需要这样的结构

      很少。在这里查看我的答案: https://stackoverflow.com/questions/4517299/is-fstream-better-than-iostream-in-c/4517883#4517883

      编辑: 如果你认为你不需要它,你就不需要它。

      【讨论】:

      • @Readwald。好的,我也认为,在您的示例中,最好编写 std::istream 或 std::ostream,但我的问题是为什么我需要同时读取和写入文件的能力?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多