下面的代码在XMLFormatTarget行上给了我一个例外,但是如果我将字符串从"C:/test.xml"更改为"test.xml",它就可以正常工作。

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>

using namespace xercesc;

int main()
{
    XMLPlatformUtils::Initialize();

    XMLFormatTarget *formatTarget = new LocalFileFormatTarget("C:/test.xml");

    return 0;
}


[编辑]
Xerces例外是:


  错误消息:无法打开文件
  'C:\ test.xml'


Windows例外是:


  拒绝访问

最佳答案

可能是您没有足够的权限写入C:\。在这种情况下,Xerces可能会报告引发异常的错误。

如果您尝试在没有管理员凭据的情况下写入系统目录,通常会遇到Access Denied异常。



也许它与目录分隔符有关:

XMLFormatTarget *formatTarget = new LocalFileFormatTarget("C:\\test.xml");


在Windows上,目录分隔符为反斜杠“ \”。有些库不在乎(而且我从没使用过Xerces,所以我不能说)。在CC++中,反斜杠也是转义字符,因此如果要在字符串中使用小写的“ \”,则必须将其加倍。

另外,告诉我们您所遇到的异常是什么会帮助我们更多。



没有直接关系,但是从您的代码看来,您永远不会delete formatTarget。我假设这是示例代码,但如果不是,则应在代码中添加以下行:

delete formatTarget;


或改为使用范围指针:

boost::scoped_ptr<XMLFormatTarget> formatTarget(new LocalFileFormatTarget("C:\\test.xml"));


为了避免内存泄漏。

关于c++ - 两行Xerces程序中的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3091484/

10-12 05:46