C# 保存以前用户登录信息的正确方法

C# 保存以前用户登录信息的正确方法,c#,wpf,C#,Wpf,我的wpf应用程序有一个登录屏幕。登录屏幕由一个包含人员集合的组合框组成。我目前实现了一个文件夹目录和文本文件,在初始化时创建(如果第一次登录),一旦文件夹和文件存在,它将读取文件,并根据保存的值,从人员集合中加载正确的用户 我的问题是这是最理想的方式吗?我想知道有没有更好的方法,我觉得这是一种非常古老的方法。任何提示都将不胜感激 例如,如果John Smith登录-下次John启动应用程序时,他的名字将自动成为SelectedItem public void CacheInitialize()

我的wpf应用程序有一个登录屏幕。登录屏幕由一个包含人员集合的组合框组成。我目前实现了一个文件夹目录和文本文件,在初始化时创建(如果第一次登录),一旦文件夹和文件存在,它将读取文件,并根据保存的值,从人员集合中加载正确的用户

我的问题是这是最理想的方式吗?我想知道有没有更好的方法,我觉得这是一种非常古老的方法。任何提示都将不胜感激

例如,如果John Smith登录-下次John启动应用程序时,他的名字将自动成为
SelectedItem

public void CacheInitialize()
{
    var folderDirectory = System.AppDomain.CurrentDomain.BaseDirectory + "Cache";
    var fileName = "UserCache.txt";
    var fileDirectory = folderDirectory + "\\" + fileName;
    if (!Directory.Exists(folderDirectory))
    {
        Directory.CreateDirectory(folderDirectory);
    }
    if (!File.Exists(fileDirectory))
    {
        File.WriteAllText(Path.Combine(folderDirectory, fileName), string.Empty);
        return;
    }
    else
    {
        var filecontent = File.ReadAllText(Path.Combine(folderDirectory, fileName));
        if (filecontent != string.Empty)
            SelectedUser = Users.First(x => x.Id == int.Parse(filecontent));
    }
}

public void CacheSave()
{
    var folderDirectory = AppDomain.CurrentDomain.BaseDirectory + "Cache";
    var fileName = "cache file3.txt";
    var fileDirectory = folderDirectory + "\\" + fileName;

    StreamWriter writer = new StreamWriter(fileDirectory);
    writer.Write(SelectedUser.Id.ToString());
    writer.Close();

}

创建新文件没有任何优势,尤其是在非格式化文本格式中。我将使用
App.config
保存这些值:

public void CacheInitialize()
{
    string lastLogin = ConfigurationManager.AppSettings["LastLogin"];
    if (String.IsNullOrEmpty(lastLogin)) return;        

    int userId;
    if (!int.TryParse(lastLogin, out userId)) 
        throw new ArgumentException("LastLogin is not an integer.");

    SelectedUser = Users.First(x => x.Id == userId);
}

public void CacheSave()
{
    Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    if (configuration.AppSettings.Settings["LastLogin"] == null)
        configuration.AppSettings.Settings.Add("LastLogin", SelectedUser.Id.ToString());
    else
        configuration.AppSettings.Settings["LastLogin"].Value = SelectedUser.Id.ToString();
    configuration.Save();

    ConfigurationManager.RefreshSection("appSettings");
}
请小心使用此代码:

SelectedUser = Users.First(x => x.Id == int.Parse());

请记住,最终用户可以替换文件中的值,并且在没有适当身份验证的情况下,他不应作为另一个用户访问应用程序。

我的直接答案是使用某种事务数据库。这个文件在自找麻烦!我猜这真的取决于应用程序的使用环境以及人们如何与之联系。这有用吗?你好@Yeldar,很好的方法,谢谢你提供关于访问文件和编辑的额外提示。