C++ ofstream System.AccessViolation

标签 c++

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

**** 中发生类型为“System.AccessViolationException”的未处理异常

附加信息:试图读取或写入 protected 内存。这通常表明其他内存已损坏。

我正在使用的代码(非托管)是这个:

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() 方法创建文件并且文件是可写的,但是当尝试写入文件时抛出异常。

先谢谢大家

最佳答案

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

此外,请确保该文件未被其他应用程序(如 Excel 或 Word)打开以独占使用。他们有打开文件时锁定文件的习惯。

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

关于C++ ofstream System.AccessViolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25118339/

相关文章:

c++ - C++ 中的成员与方法参数访问

c++ - 从文件读入后数组的第一个元素奇怪

c++ - C++ 中的公共(public)/私有(private)

c++ - 有没有办法将数组行为作为静态结构数据成员?

c++ - DirectX 11 - 计算着色器 : Writing to an output resource

c++ - 这段代码是如何运行的?

C++迭代器问题

c++ - 如何访问第二个结构中 void* 指向的结构的元素

c++ - linux中的time_t类型是什么

c++ - Qt C++ xor 用于校验和?