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"吧
總結
以上是生活随笔為你收集整理的ofstream写不进txt文件的奇怪问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vector中find 的用法
- 下一篇: c++ 利用内存映射读取大文件