我有一个为Linux编写的小应用程序,现在已移植到Windows。它是单线程的并且使用boost(如果重要的话) 应用程序正在尝试使用以下代码写入文本文件:
m_oFile.open(oFileName.c_str());
if(!m_oFile.is_open())
{
cerr << "Unable to open output file: " << oFileName.c_str() << endl;
exit(0);
}
m_oFile << "some text goes here\n";
m_oFile是该班级的成员 该文件已成功创建和打开;在上面的最后一个代码行抛出异常。
堆栈追踪:
msvcr100.dll!_lock_file(_iobuf * pf) Line 236 + 0xa bytes C
App.exe!std::basic_filebuf<char,std::char_traits<char> >::_Lock() Line 310 + 0xf bytes C++
App.exe!std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base(std::basic_ostream<char,std::char_traits<char> > & _Ostr) Line 93 + 0x30 bytes C++
App.exe!std::basic_ostream<char,std::char_traits<char> >::sentry::sentry(std::basic_ostream<char,std::char_traits<char> > & _Ostr) Line 114 + x3a bytes C++
谢谢!
编辑:
当我将代码生成属性更改为使用多线程调试DLL(/ MDd)而不是多线程Dll(/ MD)时,一切都正常运行。你有什么解释吗?
再次感谢。
答案 0 :(得分:1)
哦 - 图书馆梦魇的msvc不兼容 - 是的,确保所有(!)库彼此匹配。
答案 1 :(得分:0)
看看here并尝试以读/写模式打开文件。
m_oFile.open(oFileName.c_str(), ios::out | ios::in);
否则,请检查文件的权限。
请务必在最后关闭文件。
m_oFile.close();
另一个打击:可以从另一个线程使用该文件吗?