簡體   English   中英

C#Streamwriter拒絕將XML文件保存到MyDocuments中的訪問

[英]C# streamwriter denies access to save xml file into MyDocuments

我創建了一個小游戲,可以選擇將角色保存到XML文件中,現在我希望Savegame-Folder位置位於MyDocuments中,但是每次嘗試保存XML時,我都會受到Streamwriter的拒絕訪問。 有人知道該如何解決嗎?

這是我的代碼:

 // Create the folder into MyDocuments (works perfectly!)

Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Arena\Savegames\"));

// This one should the save the file into the directory, but it doesn't work :/

path = Path.GetDirectoryName(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Arena\Savegames\" + hero.created + ".xml"));

串流作者:

public class SaveLoadGame
    {
        public void SaveGameData(object IClass, string filename)
        {
            StreamWriter saveGameWriter = null;
            try
            {
                XmlSerializer  saveGameSerializer = new XmlSerializer((IClass.GetType()));
                saveGameWriter = new StreamWriter(filename);
                saveGameSerializer.Serialize(saveGameWriter, IClass);
            }
            finally
            {
                if (saveGameWriter != null)
                saveGameWriter.Close();
                saveGameWriter = null;
            }
        }
    }

    public class LoadGameData<T>
    {
        public static Type type;

        public LoadGameData()
        {
            type = typeof(T);
        }

        public T LoadData(string filename)
        {
            T result;
            XmlSerializer loadGameSerializer = new XmlSerializer(type);
            FileStream dataFilestream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            try
            {
                result = (T)loadGameSerializer.Deserialize(dataFilestream);
                dataFilestream.Close();
                return result;
            }
            catch
            {
                dataFilestream.Close();
                return default(T);
            }

        }
    }

我嘗試了一些在stackoverflow上找到的解決方案,例如thisthis 但是對我沒有用,也許其他人對我如何訪問該文件夾有一個想法? 也許只是將其保存在我實際可以訪問的地方,因為ApplicationData和CommonApplicationData也不適合我。

順便說一句,我正在使用帶有Win10_Preview的Virtual Box,我希望不是因為這個。

編輯:在嘗試將文件保存到MyDirectory之前,我設法將文件保存到項目的Debug文件夾中,如下所示:

path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Savegames\" + hero.created + ".xml";

gameSaver.SaveGameData(myCharacterObject, path);

多虧了Jon Skeet ,我才知道我只是在使用目錄名,而不是保存文件的完整路徑。 所以我將代碼固定為:

 // Creating the folder in MyDocuments
Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Arena\Savegames\"));

 // Setting the full path for my streamwriter
path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Arena\Savegames\" + hero.created + ".xml";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM