ofstream写不进txt文件的奇怪问题

double m_b[M][N]={0};

string filePath =  "file.txt";
ofstream file(filePath.c_str());

//下面三种都可以写进去

//file<<"i love"<<endl;
 //file<< 1.23 <<endl;
 //file<< m_b[0][0]<<endl;

//下面这样确一直写不进去

for(int i=0;i<M;i++)
 {
  for(int j=0;j<N;j++)
  {
      file<< m_b[i][j]<< "  "; 
    }
 }

 

很奇怪不论" " 里面写什么,txt里面都是空的,而 将file<< m_b[i][j]<< "  "; 
改成file<< m_b[i][j]<< endl;  时txt不是空的,可以写进去,太奇怪了。


 后来发现 我是在这后面设置断点,来查看的,因为没有刷新txt内容,所以没有显示。

STLPort中的实现如下:

_CRTIMP inline basic_ostream<wchar_t, char_traits<wchar_t> >&
 __cdecl endl(basic_ostream<wchar_t,
char_traits<wchar_t> >& _O)
{_O.put('\n');
 _O.flush();
return (_O); }


它的工作其实就是输出一个“\n”,不过后面又带了一句flush(),这一句是强制刷新缓冲区的。

 

如果后面直接写上 file.close()时,txt会有所写进去的内容。

因为fstream.close() 会flush(),添加结束标志。

而endl行标志结束,也会flush()一下,所以这时候设断点查看txt也会出现。

另外引申:

如果每次输出都刷新缓冲区那就会影响到程序的性能,无法使用缓冲区的优点,所以使用的时候考虑是不是在很多地方需要endl,如果可以还是换成"\n"吧

C++写入文本文件通常涉及到使用文件流(fstream)操作。如果你遇到无法将数据写入.txt文件问题,可能是因为以下几个原因: 1. 文件路径错误:确保你提供的文件路径是正确的,并且有写入权限。如果文件不存在,需要先创建。 2. 文件流未关闭:在写入文件后,记得关闭文件流以释放系统资源。忘记关闭可能导致后续操作失败。 3. 编码问题:如果文件不是默认的文本编码(如UTF-8),可能需要指定正确的编码打开文件。 4. 写入异常:检查代码是否有异常处理,例如文件已被其他程序占用,或磁盘空间不足等情况。 5. 内存管理:确保动态分配的内存(如字符串)已经正确释放,避免因内存溢出导致写入失败。 6. 操作错误:在写入特定字符或字符串时,确保没有超出文件流的限制,例如写入大整数可能导致缓冲区溢出。 针对以上问题,请检查你的代码,确保在打开文件写入数据和关闭文件流的各个环节都正确无误。下面是基本的写入操作示例: ```cpp #include <fstream> #include <string> std::string data_to_write = "Hello, World!"; std::ofstream file("example.txt", std::ios::app); // 'a' for appending if (file.is_open()) { file << data_to_write; file.close(); if (file) { std::cout << "Data written successfully.\n"; } else { std::cerr << "Error: Could not close the file.\n"; } } else { std::cerr << "Error: Unable to open the file.\n"; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值