XNA - 保存xml文件时出现UnauthorizedAccessException

时间:2013-01-16 14:14:58

标签: c# xml xna directory file-permissions

在我的游戏过程中,您可以保存地图并将地图中的图块存储到xml文件中 到目前为止没问题。当我尝试保存它时会出现问题,它会以某种方式给我UnauthorizedAccessException错误。

该文件夹位于我游戏的安装目录中:

  

instal_dir /数据/地图/

我检查确认,但是使用正确的权限(写入,读取和执行)成功创建了文件夹。

我做错了吗?

这是我的代码:

private void CreateXMLOfMap()
{
    List<Tile> tiles = mapContainer.GetTileList();
    XmlDocument doc = new XmlDocument();
    XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
    doc.AppendChild(docNode);

    XmlNode rootNode = doc.CreateElement("Map");
    doc.AppendChild(rootNode);

    XmlNode mapName = doc.CreateElement("Name");
    mapName.AppendChild(doc.CreateTextNode("custom_map"));
    rootNode.AppendChild(mapName);

    XmlNode tilesNode = doc.CreateElement("Tiles");
    rootNode.AppendChild(tilesNode);

    for (int i = 0; i < tiles.Count; i++ )
    {
        XmlNode tileNode = doc.CreateElement("Tile");
        tilesNode.AppendChild(tileNode);

        XmlNode positionNode = doc.CreateElement("Position");
        tileNode.AppendChild(positionNode);
        XmlNode xNode = doc.CreateElement("X");
        xNode.AppendChild(doc.CreateTextNode(tiles[i].GetTilePosition().X.ToString()));
        positionNode.AppendChild(xNode);
        XmlNode yNode = doc.CreateElement("Y");
        yNode.AppendChild(doc.CreateTextNode(tiles[i].GetTilePosition().Y.ToString()));
        positionNode.AppendChild(yNode);

        XmlNode textureNode = doc.CreateElement("Texture");
        textureNode.AppendChild(doc.CreateTextNode(tiles[i].GetTileInfo().Name.ToString()));
        tileNode.AppendChild(textureNode);

        XmlNode YFrameNode = doc.CreateElement("YFrame");
        YFrameNode.AppendChild(doc.CreateTextNode(tiles[i].GetCurrentFrame().Y.ToString()));
        tileNode.AppendChild(YFrameNode);
    }

    doc.Save(Constants.MAPS_DIRECTORY);
}

3 个答案:

答案 0 :(得分:2)

我认为问题在于您不以管理员身份运行应用程序,这会导致UnauthorizedAccessException。所以你应该force the system to run it as administrator。尝试从以下位置更改Application Manifest文件:

<requestedExecutionLevel level="asInvoker" uiAccess="false"/>

为:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>

修改

  

如何使用visual studio的管理员权限运行游戏?

有时即使我是系统管理员,当我使用vs2010调试应用程序时,我也会遇到这种情况。但是,如果要以管理员身份调试应用程序,请尝试右键单击visual studio图标,然后以管理员身份运行

答案 1 :(得分:1)

好的,所以我发现导致此异常的问题出现了。它显示我只包含目录,但不包括文件名。所以它试图将内容存储到目录中,而不是存储到xml文件中。

所有我不得不改变的是字符串进入

doc.Save(PATH_TO_DIR_WITH_FILE_NAME);

但我会保留在我的内容中,如果我继续这样做,我可能最终需要管理员权限,所以我迟早需要更改它。

感谢大家的建议和帮助!

答案 2 :(得分:1)

我有类似的问题,但我认为,调用简单文件操作的管理员权限是不正确的。所以我在保存之前手动删除了存在的文件:

File.Delete(mainXmlPath);
xmlDocument.Save(mainXmlPath);