Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.09.2021
Сообщений: 97

Курсор не обновляется в файле

04.10.2022, 02:55. Показов 550. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть бинарный файл, в котором лежат структуры(прикреплен текстовый вариант файла). По условию задачи функция должна принимать в качестве одного из параметров номер структуры, которую нужно заменить на последнюю структуру. Я прохожусь по всему файлу, пока не нахожу последнюю структуру и записываю ее во временную переменную а также считаю кол-во этих структур. Дальше я хочу, перезаписать структуру под порядковым номером на новую, однако это не срабатывает. Насколько я проверял, курсор просто не перемещается заново,либо же перемещается, но тогда почему то не срабатывает ни read ни write
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <fstream>
#include <iostream>
#include <string>
#include <istream>
 
using namespace std;
struct birthday {
    char day[20];
    char name[45];
};
void delete_from_binaru(string name,char key[15],int a)
{
    fstream binary(name, ios::binary);
    birthday tmp_v;
    birthday x;
    int i=0;
    char prev_day[20];
 
    binary.read((char *)&tmp_v, sizeof(birthday));
    strcpy(prev_day, tmp_v.day);
    do
    {
        binary.read((char *)&tmp_v, sizeof(birthday));
        i++;
        if (strcmp(prev_day,tmp_v.day)!=0) {
            cout<<"Не равны="<<prev_day<<" "<<tmp_v.day<<endl;
            strcpy(prev_day, tmp_v.day);
 
        }
 
        else
        {
            cout<<tmp_v.day<<i;
            break;
        }
    } while (!binary.eof());
 
    binary.seekg(0);
    binary.seekg(sizeof(birthday)*(a-1),ios::beg);
    binary.write((char *) &tmp_v, sizeof(birthday));
 
 
    binary.seekg(0);
    binary.seekg(sizeof(birthday)*(a-1),ios::beg);//просто добавил эту перемещение,чтобы попробовть считать в пустой элемент структры, но х выводится пустым
    binary.read((char *) &tmp_v, sizeof(birthday));
    cout<<x.day;
}

При этом такая функция работает:
C++
1
2
3
4
5
6
7
8
9
10
void seek(string name,int i)
{
    ifstream binary(name, ios::binary);
    birthday x;
    binary.seekg(sizeof(birthday)*(i-1),ios::beg);
    binary.read((char*)&x, sizeof(birthday));
    cout<<"Result"<<x.name<<" "<<x.day;
 
 
}
Вложения
Тип файла: txt birthday.txt (138 байт, 0 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2022, 02:55
Ответы с готовыми решениями:

Как переместить курсор в файле в читаемом файле на начало?
Добрый день. Выполнил цикл &quot;while not eof(inputFile)&quot;. Теперь надо выполнить еще раз цикл с таким же условием, но другим содержимым. Я...

как двигать курсор в текстовом файле?
Рребят, подскажите, как двигать курсор в текстовом файле?

как переместить курсор в текстовом файле?
Подскажите как в текстовом файле вернуть курсор на начало файла? Функция seek не работает, а с функцией SetFilePointer разобраться не могу,...

4
0 / 0 / 0
Регистрация: 10.09.2021
Сообщений: 97
04.10.2022, 03:25  [ТС]
Кстати такая функция работает:
C++
1
2
3
4
5
6
7
8
9
10
void seek(string name,int i)
{
    ifstream binary(name, ios::binary);
    birthday x;
    binary.seekg(sizeof(birthday)*(i-1),ios::beg);
    binary.read((char*)&x, sizeof(birthday));
    cout<<"Result"<<x.name<<" "<<x.day;
 
 
}
Добавлено через 25 минут
Решение найдено:
C++
1
binary.clear();
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,296
04.10.2022, 08:03
Цитата Сообщение от lee3112 Посмотреть сообщение
} while (!binary.eof());
Ну так у вас в программе цикл, который крутится до тех пор, пока файл не попадет в состояние EoF. После того, как файл попал в состояние EoF, никакие команды он выполнять не будет, пока вы не сделаете clear().

Цитата Сообщение от lee3112 Посмотреть сообщение
а также считаю кол-во этих структур.
Ваша программа не будет правильно считать количество структур в файле потому, что итерирует до EoF. По этой же причине она будет страдать от эффекта "двойного чтения" последнего элемента (При считывании из файла последний элемент читается дважды)

Как вам уже не раз дылдонили, если ваша программа итерирует до EoF, правильно работать она не будет. Как только в вашем коде появился такой вызов eof() - код неработоспособен.

Цитата Сообщение от lee3112 Посмотреть сообщение
Решение найдено:
Нет.
0
0 / 0 / 0
Регистрация: 10.09.2021
Сообщений: 97
04.10.2022, 10:47  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как только в вашем коде появился такой вызов eof() - код неработоспособен.
На что тогда лучше всего заменить,EOF если мне неизвестно, какое количество структур в моем файле?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет.
Ну код то заработал в моем случае, после использования метода clear.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,296
04.10.2022, 11:39
Цитата Сообщение от lee3112 Посмотреть сообщение
Ну код то заработал в моем случае
Вы просто плохо тестировали.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2022, 11:39
Помогаю со студенческими работами здесь

Открыть папку и установить курсор на искомом файле
Здравствуйте, такое на ВБА возможно, подскажите как эту строку точно указать Shell(&quot;explorer.exe&quot;, &quot;/select, \&quot;&quot;...

Как перевести курсор в файле на следующую строку (ifstream)?
как перевести курсор в файле на следующую строку при работе с потоком ifstream?

Можно ли в текстовом файле поставить курсор с конца строки на начало?
при выполнении задания у меня возник вопрос, можно ли в текстовом файле поставить курсор с конца строки на начало, при условии что строк в...

Почему метод Seek не возвращает курсор в файле на предыдущую строку?
Читаю строку из файла. Если в этой строке начальный символ &quot;цифра&quot; значит эта строка является начальной строкой данных, которые надо...

Как открыть Explorer и чтобы курсор был установлен на нужном файле?
Есть путь файла. Мне нужно открыть проводник, и чтобы курсор был установлен на данном файле. Подскажите, как это можно сделать?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru