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