2015-10-23 3 views
0

В моем приложении wpf есть экран входа. Экран входа состоит из выпадающего списка с коллекцией людей. В настоящее время я реализовал каталог папок и текстовый файл, созданный при инициализации (если первый раз входе в систему), когда существует папка и файл, он считывает файл и на основе сохраненного значения он загрузит правильного пользователя из коллекции людей.Правильный способ сохранить предыдущую информацию для входа в систему

Мой вопрос - это самый идеальный способ сделать это? Мне интересно, есть ли лучший способ сделать это, я чувствую, что это очень старый школьный метод. Любые советы будут очень признательны.

Например, если Джон Смит входит в систему - в следующий раз, когда Джон запустит приложение, его имя автоматически будет 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

Смежные вопросы