2016-04-28 15 views
0

このコードでは、XMLファイルを作成し、チェックボックスがtrueまたはfalseであるかどうかを保存します。アプリケーション起動時に読み込まれますc#シリアライズ可能オブジェクトXMLファイルの場所

[Serializable()] 
[XmlRoot("Store", Namespace = "")] 
public class Credentials 
{ 
    public Credentials() { } 

    public bool checkBox1State { get; set; } 


    public static Credentials ReadCredentials() 
    { 
     XmlSerializer reader = new XmlSerializer(typeof(Credentials)); 
     System.IO.StreamReader file = new System.IO.StreamReader("Credentials.xml"); 
     Credentials data = new Credentials(); 
     data = (Credentials)reader.Deserialize(file); 
     file.Close(); 
     return data; 
    } 

    public static void WriteCredentials(Credentials data) 
    { 
     XmlSerializer writer = new XmlSerializer(typeof(Credentials)); 
     System.IO.StreamWriter file = new System.IO.StreamWriter("Credentials.xml"); 
     writer.Serialize(file, data); 
     file.Close(); 
    } 
} 

私のプログラムは、XMLファイルから完全に読み書きします。しかし、これは、.exeが起動されたルートディレクトリに保存されていることに気付きました。通常、これは書き込みに高い権限が必要なプログラムファイルにあります。

このように、このファイルをユーザーのAppDataフォルダに保存します。これを可能にするために私のコードにどのような変更が必要ですか?

ありがとう

答えて

1

現在のユーザーのAppDataディレクトリへのパスを解決する必要があります。どちらのSpecialFolder列挙型と

string fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "Credentials.xml") 

または

string fileName = Environment.ExpandEnvironmentVariables(@"%AppData%\Credentials.xml"); 

そしてrealtiveファイル名の代わりに

System.IO.StreamReader file = new System.IO.StreamReader(fileName); 
+0

をそれを使用する変数の環境を拡張することで、それは素晴らしい作品、ありがとうございます。私はこれを見逃した – nerdalert

関連する問題