C++ 指向C+中fstream的指针出现问题+;

C++ 指向C+中fstream的指针出现问题+;,c++,file,pointers,fstream,C++,File,Pointers,Fstream,我在下面的代码中遇到了一个问题,我试图使用指向文件流的指针将一些文本写入文件,但下面的代码没有写入文件,我在没有指向fstream的指针的情况下进行了尝试,效果很好,但是使用指针我看不到文本文件中的任何更改,但代码编译成功 fstream *io = new fstream("FILE/myFile.txt" , ios_base::in | ios_base::out); if(!io -> is_open()){ cout << "Could

我在下面的代码中遇到了一个问题,我试图使用指向文件流的指针将一些文本写入文件,但下面的代码没有写入文件,我在没有指向
fstream
的指针的情况下进行了尝试,效果很好,但是使用指针我看不到文本文件中的任何更改,但代码编译成功

fstream  *io =  new  fstream("FILE/myFile.txt"  ,  ios_base::in | ios_base::out);
  if(!io -> is_open()){
        cout << "Could not open file or file does not exist!" << endl;
        exit(1);
  }
 *io << "Hello World"
fstream*io=newfstream(“FILE/myFile.txt”,ios_base::in | ios_base::out);
如果(!io->处于打开状态()){

cout您需要关闭该文件:
io->close();
如果不关闭该文件,它将不会刷新磁盘上的数据。
当您在堆栈上创建fstream对象时,当该对象超出范围时,它将关闭文件(在distructor中).

Streams缓冲输出。如果未刷新流,则永远不会写入输出。由于写入的字符串很小,因此将对其进行缓冲。流的析构函数将刷新流,就像填充缓冲区一样。写入时,指针泄漏,流永远不会被销毁,因此不会被刷新

解决问题的方法按优先顺序排列:

  • 不要使用指针
  • 使用智能指针,例如,
    std::unique_ptr
    来保存流
  • 删除程序末尾的流对象(这很容易忘记,最好使用自动销毁)
  • 至少,
    close()
    使用
    io->close()
    关闭流。不
    delete
    关闭流会导致资源泄漏

  • 使用
    *io刷新流这可能只是缓冲区的问题:您需要刷新流,以确保所有内容都写入文件中。以下代码段工作正常:

    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
      ofstream* f = new ofstream("out.dat");
    
      if(! f->is_open())
      {
        cerr << "Impossible to open the file" << endl;
        exit(-1);
      }
    
      *f << "Hello, world!" << flush;
    
      f->close();
    
      delete f;
    
      return 0;
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    ofstream*f=新的ofstream(“out.dat”);
    如果(!f->处于打开状态())
    {
    
    cerr为什么要创建指向文件流的指针?是否尝试了
    std::flush
    ?您可能想尝试:
    (*io)@ ToMasMatthWoW在输出文件中不希望有换行符。<代码> STD::FLASH 总是刷新缓冲区。@ ToMasMatthWus:实际上,C++中的换行符没有什么特殊性。标准在使用<代码> \n′/COD>时,不强制任何流的刷新。C流确实有行缓冲模式。(
    \u IOLBF
    )但除非按照
    文件*
    实现流缓冲区,否则即使这样也不会有帮助,
    \u IOLBF
    也不是默认值(我认为它默认仅设置为
    标准输出
    )。感谢alangab,您已经解决了我的问题,我在编写后关闭了文件,并且我可以看到文件中的更改……谢谢