2015-10-23 72 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