C ++ ofstream System.Access Violation

时间:2014-08-04 12:07:53

标签: c++

我有问题。我正在写一个日志文件,但是当我执行该应用程序时抛出:

****

中出现未处理的“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()方法创建文件,文件是可写的,但在尝试写入文件时抛出异常。

先谢谢你们。

2 个答案:

答案 0 :(得分:2)

检查以确保您的应用程序有权写入该位置的文件。 Windows中的标准用户无法访问整个文件系统(尤其是用于写入)。要么应用程序具有管理员权限(不推荐用于“普通”应用程序),要么写入标准用户可以访问的地方(例如,我的文档目录)。

此外,请确保该文件未打开以供Excel或Word等其他应用程序独占使用。他们习惯在打开文件时锁定文件。

另一件需要注意的事情是在开发过程中,有时.NET运行时/ VS调试器会在崩溃后保留一个您正在处理的文件。尝试关闭/重新打开Visual Studio以帮助解决这个问题。

答案 1 :(得分:0)

好的,

为了将来通知,问题与项目的配置有关。当我将项目从vs2008转换为vs2010,从.net 3.5转换为.net 4,从x32转换为x64时,有些事情并没有完全正确。

所以我将所有内容还原并在一个更受控制的环境中再次转换,现在我可以毫无问题地打开/写入/关闭文件。

无论如何,谢谢你们。