C++ 两行Xerces程序中的异常

C++ 两行Xerces程序中的异常,c++,windows,xerces,C++,Windows,Xerces,下面的代码在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 <

下面的代码在
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;
}
//test.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间xercesc;
int main()
{
XMLPlatformUtils::Initialize();
XMLFormatTarget*formatTarget=新的LocalFileFormatTarget(“C:/test.xml”);
返回0;
}
[编辑] Xerces例外情况是:

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

Windows例外情况是:

访问被拒绝


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

如果您试图在没有管理员凭据的情况下写入系统目录,则通常会出现
访问被拒绝
异常


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

XMLFormatTarget *formatTarget = new LocalFileFormatTarget("C:\\test.xml");
在Windows上,目录分隔符是反斜杠“\”。有些库不在乎(而且我从未使用过Xerces,所以我说不出来)。在
C
C++
中,反斜杠也是一个转义字符,因此如果希望字符串中有一个小“\”,则必须将其加倍

另外,告诉我们你得到的例外情况会对我们帮助更大


不是直接相关的,但从您的代码来看,您似乎从未
删除
formatTarget
。我假设这是示例代码,但如果不是,则应在代码中添加以下行:

delete formatTarget;
或者改用作用域指针:

boost::scoped_ptr<XMLFormatTarget> formatTarget(new LocalFileFormatTarget("C:\\test.xml"));
boost::作用域的\u ptr formatTarget(新的LocalFileFormatTarget(“C:\\test.xml”);

为避免内存泄漏。

如果只使用
test.xml
则指定相对于当前工作目录(通常是程序启动的位置)的路径。因此,如果您的程序不直接在C:驱动器上,那么这两次运行可能指向不同的文件。
C:\test.xml
可能有错误,但是
C:\Path\to\your\program\test.xml
正确,因此后者不会给您带来任何异常


无论如何,正如ereOn所说,如果我们知道抛出了哪个异常,这将有所帮助。

尝试对文件名进行转码:

// Convert the path into Xerces compatible XMLCh*. 
XMLCh *tempFilePath = XMLString::transcode(filePath.c_str()); 

// Specify the target for the XML output. 
XMLFormatTarget *formatTarget = new LocalFileFormatTarget(tempFilePath);

根据a.

请帮助我们帮助您:您有什么例外?我也不知道Xerxes,但是
LocalFileFormatTarget formatTarget(“C:\\test.xml”)有什么问题?感谢您的回复,我仍然收到“C:\\test.xml”的异常。我知道formatTarget需要释放,我只是想发布尽可能少的代码来重现问题。我会发回一个例外。并不是说“某些库”不在乎,WinAPI本身也不在乎,而且大多数情况下你可以在Windows上互换使用\和/。@sbi:双反斜杠没有什么问题,这就是我的观点。也许你误读了问题或我的答案@sbk:我看到很多图书馆都很在乎。也许那些库设计得很糟糕,但那是另一个话题。无论如何,因为我不知道Xerces,所以我不能确定。更新了原始问题,但有例外。感谢您的回复king_nak,对于工作或非工作示例,test.xml文件都不存在。这段代码是实际创建并填充test.xml的程序的一部分。