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,您已经解决了我的问题,我在编写后关闭了文件,并且我可以看到文件中的更改……谢谢