【问题标题】:XNA - UnauthorizedAccessException when saving xml fileXNA - 保存 xml 文件时出现 UnauthorizedAccessException
【发布时间】:2012-12-30 21:20:22
【问题描述】:

在我的游戏过程中,您可以保存地图并将地图中的图块存储到 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);
}

【问题讨论】:

  • 如果您以管理员权限运行游戏会怎样?
  • 您是否尝试过以管理员身份运行它?您的游戏安装目录的完整路径是什么?它在“程序文件”中吗?如果是,我建议不要将 .xml 文件写入您的安装目录,而是写入您的“我的文档”文件夹或类似文件夹。
  • 这是一个将二进制文件与用户数据分开的好习惯。大多数情况下,二进制文件位于c:\Program files,而用户数据位于用户的%APPDATA% 下。这种模式允许“保护”二进制文件免受不幸或恶意更新,同时让每个用户拥有自己的私人数据。

标签: c# xml xna directory file-permissions


【解决方案1】:

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

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

到:

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

编辑:

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

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

【讨论】:

    【解决方案2】:

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

    我所要做的就是改变进入

    的字符串
    doc.Save(PATH_TO_DIR_WITH_FILE_NAME);
    

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

    感谢大家的建议和帮助!

    【讨论】:

    • 感谢此次更新!我尝试使用管理员权限,但它从未奏效。此外,使用管理员权限进行简单的文件写入似乎太多了。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多