2016-03-09 76 views
2

以下代碼在使用mingw的代碼塊中正常工作,但在Visual Studio中失敗。爲什麼?Visual Studio中fstream指針的問題

fstream* __fstreamm = new fstream(); 
string _fileName="testing.log"; 
__fstreamm->open(_fileName.c_str(), std::fstream::in | std::fstream::out); 
if(__fstreamm->fail()) 
{ 
    __fstreamm->open(_fileName.c_str(), std::fstream::trunc | std::fstream::out); 
    __fstreamm->close(); 
    // re-open with original flags 
    __fstreamm->open(_fileName.c_str(), std::fstream::in | std::fstream::out); 
} 
__fstreamm->seekp(0, ios::end); 
*__fstreamm << "SSSSSSSSSTTTTTTTAAAAAAAAAARRRRRRRRRRRRTTTTTTTTTTT"<<std::endl; 
__fstreamm->flush(); 

使用代碼塊時創建並寫入文件,但使用vs2008文件時創建但未寫入。

+0

首先以雙下劃線開頭的變量名被保留用於實現並且不被使用。第二,你爲什麼首先做一個'fstream *'? – NathanOliver

+0

'fstream * __fstreamm = new fstream();'這幾乎是不對的, – SergeyA

+0

我使用fstream *因爲我正在實現一個fstreams數組來寫入另一段代碼。在這個例子中,它是不重要的 – Starfish

回答

3

我找到了解決方案。

fstream* __fstreamm = new fstream(); 
string _fileName="testing.log"; 
__fstreamm->open(_fileName.c_str(), std::fstream::in | std::fstream::out); 
if(__fstreamm->fail()) 
{ 
    __fstreamm->open(_fileName.c_str(), std::fstream::trunc | std::fstream::out); 
    __fstreamm->close(); 
    // re-open with original flags 
    delete __fstreamm; 
    __fstreamm = new fstream(); 
    __fstreamm->open(_fileName.c_str(), std::fstream::in | std::fstream::out); 
} 
__fstreamm->seekp(0, ios::end); 
*__fstreamm << "SSSSSSSSSTTTTTTTAAAAAAAAAARRRRRRRRRRRRTTTTTTTTTTT"<<std::endl; 
__fstreamm->flush();