Вот идея о том, как это реализовать. Мое первое предложение - добавить разделитель запятых в ваш текстовый файл, чтобы ваши значения в users.txt были в следующей форме
second user~username123~password,
third user~username1234~password,
first user~username~smelly,
Импортируйте сразу всех пользователей из users.txt и разделите их с помощью нашего разделителя ','
var users = File.ReadAllText(@"C:\users.txt").Split(',').ToList().Where(x=> !String.IsNullOrWhiteSpace(x));
Примечание этот пункт .Where(x=> !String.IsNullOrWhiteSpace(x
) понадобится, потому что когда я переписываю файл, для простоты я добавляю запятую к каждой записи. Поскольку последняя запись будет иметь запятую, мы получим дополнительный пустой объект. Этот пункт исправит это.
Создайте класс, который будет содержать все пользовательские свойства:
private class User
{
public string Name { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string PrepareForFile()
{
return Name + "~" + UserName + "~" + Password + ",";
}
}
Перебрать всю полученную информацию о пользователях из файла и создать список пользователей:
List<User> myUsers = new List<User>();
foreach (var user in users)
{
var information = user.Split('~');
User temp = new User();
temp.Name = information[0].Trim();
temp.UserName = information[1].Trim();
temp.Password = information[2].Trim();
myUsers.Add(temp);
}
Теперь у вас есть управляемая структура, и вы можете выполнять все необходимые операции. После завершения используйте метод PrepareForFile (), чтобы создать строку типа second user~username123~password
для записи в файл.
Собираем все вместе (это консольное приложение):
static class Program
{
private class User
{
public string Name { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string PrepareForFile()
{
return Name + "~" + UserName + "~" + Password + ",";
}
}
static void Main(string[] args)
{
var users = File.ReadAllText(@"C:\users.txt").Split(',').ToList().Where(x=> !String.IsNullOrWhiteSpace(x));
List<User> myUsers = new List<User>();
foreach (var user in users)
{
var information = user.Split('~');
User temp = new User();
temp.Name = information[0].Trim();
temp.UserName = information[1].Trim();
temp.Password = information[2].Trim();
myUsers.Add(temp);
}
var selectedUser = myUsers.Where(x => x.UserName == "username").SingleOrDefault();
myUsers.Remove(selectedUser);
selectedUser.Password = "Leo";
myUsers.Add(selectedUser);
List<string> formatForFile = new List<string>();
foreach(var item in myUsers)
{
formatForFile.Add(item.PrepareForFile());
}
File.WriteAllLines(@"C:\users.txt", formatForFile.ToArray());
}
}
Изменение пароля username1234 с «password» на «AlexLeo»:
До
После