2015-10-23 74 views
0

我的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

我的直接答案是使用某种事务数据库。这个文件的东西是在问烦恼!猜猜这确实取决于应用程序的使用情况以及人们如何使用它。这有帮助吗? http://stackoverflow.com/questions/3784477/c-sharp-approach-for-saving-user-settings-in-a-wpf-application –

回答

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

请记住,最终用户可以在自己的文件替换值和他不应该如果没有正确的身份验证,可以以其他用户身份访

+0

嗨@Yeldar,伟大的方法,感谢关于访问文件的额外提示和编辑。 – Master