下面的代码在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,所以我不能说)。在
C
和C++
中,反斜杠也是转义字符,因此如果要在字符串中使用小写的“ \”,则必须将其加倍。另外,告诉我们您所遇到的异常是什么会帮助我们更多。
没有直接关系,但是从您的代码看来,您永远不会
delete
formatTarget
。我假设这是示例代码,但如果不是,则应在代码中添加以下行:delete formatTarget;
或改为使用范围指针:
boost::scoped_ptr<XMLFormatTarget> formatTarget(new LocalFileFormatTarget("C:\\test.xml"));
为了避免内存泄漏。
关于c++ - 两行Xerces程序中的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3091484/