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

时间:2015-10-23 03:35:49

标签: c# wpf

我的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();

}

1 个答案:

答案 0 :(得分:2)

创建新文件没有任何优势,特别是在非格式化文本格式中。我会使用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());

请注意,最终用户可以替换文件中的值,并且不应该以另一个用户身份访问应用程序,而无需进行适当的身份验证。