1

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

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

安装目录/数据/地图/

我检查以确保该文件夹已成功创建并具有正确的权限(写入、读取和执行)。

难道我做错了什么?

这是我的代码:

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);
}
4

3 回答 3

2

我认为问题在于您没有以管理员身份运行应用程序,这会导致UnauthorizedAccessException. 所以你应该强制系统以管理员身份运行它。尝试从以下位置更改应用程序清单文件:

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

到:

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

编辑:

如何使用 Visual Studio 的管理员权限运行游戏?

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

于 2013-01-16T14:44:28.603 回答
1

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

我所要做的就是把进入的字符串

doc.Save(PATH_TO_DIR_WITH_FILE_NAME);

但我会坚持下去,如果我继续这样下去,我可能最终需要管理员权限,所以我迟早需要改变它。

感谢大家的建议和帮助!

于 2013-01-17T11:28:39.243 回答
1

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

File.Delete(mainXmlPath);
xmlDocument.Save(mainXmlPath);
于 2013-12-08T12:39:57.220 回答