代码之家  ›  专栏  ›  技术社区  ›  ckv

打开文件时出现异常

  •  1
  • ckv  · 技术社区  · 14 年前

    我有一个VC++应用程序,在我的应用程序中我有一些基本的文件操作。

    以下是默认代码

    CStdioFile cFile;
    CFileException e;
    CString sReport;
    CString sHtmlfile = "testreport.html"
    OutputDebugString((sHtmlfile));
    if (!cFile.Open(sHtmlfile,CFile::modeCreate | CFile::modeWrite, &e ))
    {
    }
    

    问题是我的应用程序每隔几分钟执行一段代码。而且效果很好。

    在多次运行代码之后,cfile.open()函数将失败。我试图得到错误信息

    TCHAR szError[1024];
    e.GetErrorMessage(szError,1024);
    OutputDebugString((szError));
    

    讽刺的是,szError错误消息是“没有发生错误”。

    一旦我重新启动应用程序,这再次有效。知道为什么会这样。

    事先谢谢。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Agnel Kurian    14 年前

    您有多个实例在运行吗?我建议你用 Process Explorer 当出现错误时,查看是否存在上述文件的任何其他句柄。

    GetLastError 将报告上一个API函数报告的错误。如果失败的API调用和对的调用之间有任何其他API调用 错误信息 ,则覆盖最后一个错误值。(正如@sbi在评论中指出的那样。)

        2
  •  1
  •   kriss    14 年前

    maube您忘记关闭您的文件,它来自文件描述符。当您退出应用程序时,它们都将关闭,然后您可以再次运行它。检查文件是否已关闭。

    好啊。如果不是上述情况,可能是什么?你从cfile.open得到错误信息,因此我们相信它是准确的。

    如果当前进程已经打开了另一个同名文件,或者试图打开一个同名文件(如空字符串),我不确定会发生什么。要对其进行排序,还可以打印打开时出现错误的文件名(还可以跟踪没有出现错误的情况)。

        3
  •  1
  •   PLG    14 年前

    你正在使用C++。你的错误可能完全是在别的地方。我有一个指针错误,导致干净的代码咳出一个错误。

    你试过在发布模式下构建吗?

    我建议你试着跨过这一步,也许缩小错误的范围。