Форум программистов, компьютерный форум CyberForum.ru

Удаление строки из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 01:35     Удаление строки из файла #1
Здравствуйте! Подскажите пожалуйста, как реализовать функцию удаления нужной строки из файла. Только не по номеру, а по содержимому! Я так предполагаю, что для начала нужно найти эту строку в файле! Функцию поиска по ключу я сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool findInSortList(FILE *&f,int St, string key, int &pp, int &wp, TEdaF &eda){
        if (St==-1) {
            cout<<"Список пустой"<<endl<<endl;
            return 0;
        };
        wp=St;
        while (wp != -1) {
        fseek(f,wp,SEEK_SET);
        fread(&eda,sizeof(TEdaF),1,f);
        if (key==eda.blud)
        {break;}
        else{
            pp=wp;
            wp=eda.Next;
        }
    }
if(wp!=-1 && eda.blud==key)
    return true;
else
    return false;
}
Подскажите как дальше быть! Что делать? Ведь насколько я понимаю, то удалить из файла напрямую нельзя, ведь это не БД!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 01:54     Удаление строки из файла #2
Цитата Сообщение от yur@ Посмотреть сообщение
eda.blud
Поле blud, в TEdaF, типа string?
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 01:58  [ТС]     Удаление строки из файла #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Поле blud, в TEdaF, типа string?
да!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 02:02     Удаление строки из файла #4
Цитата Сообщение от yur@ Посмотреть сообщение
да!
Для таких структур нельзя использовать бинарные методы чтения\записи.
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 02:06  [ТС]     Удаление строки из файла #5
то есть сделать через массив char?

Добавлено через 2 минуты
хотя эта функция рабочая, поскольку я ее использовал в другом примере и все работало нормально!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 02:12     Удаление строки из файла #6
Цитата Сообщение от yur@ Посмотреть сообщение
хотя эта функция рабочая, поскольку я ее использовал в другом примере и все работало нормально!
Что, как и где используется - я не вижу (не ясновидящий). Но, что записывается в файл, когда пишется память под string?
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 02:17  [ТС]     Удаление строки из файла #7
Но, что записывается в файл,
когда пишется память под string?
ну в бинарный файл запишется какой-то набор символов, если я правильно понимаю
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 02:21     Удаление строки из файла #8
Вот здесь почитайте, как устроены разные реализации string: http://cpp.com.ru/meyers/ch2.html#t30
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 17:07  [ТС]     Удаление строки из файла #9
alsav22, Я сделал через массив char[]!
заголовочный файл имеет такой вид:
C++
1
2
3
4
5
6
7
typedef
    struct SEdaF{
      char stran[30];
      char blud[30];
      int kalory;
      int  Next;
} TEdaF;
И все же подскажите как изъять нужную строку из файла?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 17:09     Удаление строки из файла #10
Цитата Сообщение от yur@ Посмотреть сообщение
И все же подскажите как изъять нужную строку из файла?
Обычно, в таких случаях, файл переписывают (в другой файл, или сначала в массив, потом в этот же файл).
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 17:12  [ТС]     Удаление строки из файла #11
alsav22, ок! то есть мне нужно прочитать весь файл и сразу его записывать заново, и если найдется нужная строка, то просто переместить указатель на размер строки?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 17:26     Удаление строки из файла #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от yur@ Посмотреть сообщение
и если найдется нужная строка, то просто переместить указатель на размер строки?
Не нужно там ничего пермещать. Прочитали структуру (fread(&eda,sizeof(TEdaF),1,f)), указатель и так уже будет на следующей, проверили на ключ, если нет, то записываете считанную структуру в файл, если да, то просто не записываете.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2014, 17:42     Удаление строки из файла
Еще ссылки по теме:

Удаление строки из файла C++
Неправильное удаление строки из файла C++
C++ Удаление строки из файла по имени

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yur@
5 / 5 / 2
Регистрация: 06.03.2014
Сообщений: 106
20.03.2014, 17:42  [ТС]     Удаление строки из файла #13
сейчас попробую, спасибо
Yandex
Объявления
20.03.2014, 17:42     Удаление строки из файла
Ответ Создать тему
Опции темы

Текущее время: 04:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru