Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Удаление определённой строки в файле

#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.

Комментариев нет:

Отправить комментарий