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 アイコンを右クリックしてからRun as Administratorを試してください。

于 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 に答える