【问题标题】:c# Serializable object XML file locationc# 可序列化对象 XML 文件位置
【发布时间】:2016-04-28 08:48:30
【问题描述】:

我有这段代码,它创建一个 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 文件夹中。需要对我的代码进行哪些修改才能实现这一点?

谢谢

【问题讨论】:

    标签: c# xml winforms


    【解决方案1】:

    需要解析当前用户的AppData目录的路径。使用 SpecialFolder 枚举

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

    或者通过扩展环境变量

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

    并使用它来代替真实的文件名

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

    【讨论】:

    • 谢谢,效果很好。不知道我怎么忽略了这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多