#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.
Комментариев нет:
Отправить комментарий