我有问题。我正在写一个日志文件,但是当我执行该应用程序时抛出:
****
中出现未处理的“System.AccessViolationException”类型异常附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
我正在使用的代码(非托管)是这个:
inline bool writeLog(string message)
{
ofstream myfile;
myfile.open(mStrSource.c_str(), ios::in | ios::out | ios::app);
if(!myfile.is_open())
{
throw "Unable to open the file: " + mStrSource;
}
myfile << "TESTE" << endl;
myfile.close();
return true;
};
当收到此错误时,代码指向文件fstream的_Lock():
virtual void __CLR_OR_THIS_CALL _Lock()
{ // lock file instead of stream buffer
if (_Myfile)
_CSTD _lock_file(_Myfile);
}
其他信息:
在VS2010下开发(特别是该项目是Winx32,但现在是Winx64)(.NET Framework 4)。
ofstream的open()方法创建文件,文件是可写的,但在尝试写入文件时抛出异常。
先谢谢你们。
答案 0 :(得分:2)
检查以确保您的应用程序有权写入该位置的文件。 Windows中的标准用户无法访问整个文件系统(尤其是用于写入)。要么应用程序具有管理员权限(不推荐用于“普通”应用程序),要么写入标准用户可以访问的地方(例如,我的文档目录)。
此外,请确保该文件未打开以供Excel或Word等其他应用程序独占使用。他们习惯在打开文件时锁定文件。
另一件需要注意的事情是在开发过程中,有时.NET运行时/ VS调试器会在崩溃后保留一个您正在处理的文件。尝试关闭/重新打开Visual Studio以帮助解决这个问题。
答案 1 :(得分:0)
好的,
为了将来通知,问题与项目的配置有关。当我将项目从vs2008转换为vs2010,从.net 3.5转换为.net 4,从x32转换为x64时,有些事情并没有完全正确。
所以我将所有内容还原并在一个更受控制的环境中再次转换,现在我可以毫无问题地打开/写入/关闭文件。
无论如何,谢谢你们。