#c_sharp
Ситуация такая: У меня есть файл, в нем записанны строки. Я пытаюсь найти строку
по её содержанию и её удалить. Но проблема в том, что не могу найти в интернете как
её удалить. То-есть работа этого метода должна быть следующей:
Пользователь вводит логин, и по файлу идёт поиск, если находит, то он должен эту
строку удалить.
Сам файл:
lol:9cdfb439c7876e703e307864c9167a15
you:91c366db3df8b21eeb76be5c250f1a40
kek:4cfdc2e157eefe6facb983b1d557b3a1
wewe:2a7d544ccb742bd155e55c796de8e511
Вот мой код:
public void DeleteUser()
{
var log = EnterLogin();
string path = ".htpasswd";
string[] deluser = System.IO.File.ReadAllLines(path, Encoding.Default);
foreach (string items in deluser)
{
if (items.Contains(log))
{
}
}
}
Ответы
Ответ 1
Текстовый формат — потоковый, в нём невозможно выбросить часть из середины. Читайте файл построчно, пишите в выходной (другой!) файл только нужные строки, потом удаляйте исходный файл и перенесите новый файл в позицию старого. Альтернативным методом было бы читать файл по байту, запоминать текущую позицию чтения и записи, складывать байты через декодер кодировки в строку, при приходе конца строки проверять её, возможно, менять позицию записи, и отбрасывать в конце хвост. Поверьте, вам этого не хочется.Ответ 2
Если дорабатывать ваш код, то надо сделать следующее: public void DeleteUser() { var log = EnterLogin(); string path = ".htpasswd"; string[] deluser = System.IO.File.ReadAllLines(path, Encoding.Default); deluser = deluser.Where(line => line != log); System.IO.File.WriteAllLines(path, deluser, Encoding.Default); } Но в случае большого файла это будет более накладно, чем решение, предложенное VladD.
Комментариев нет:
Отправить комментарий