我的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();
}
答案 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());
请注意,最终用户可以替换文件中的值,并且不应该以另一个用户身份访问应用程序,而无需进行适当的身份验证。