Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.01.2020
Сообщений: 2
1

Удаление записи из файла

27.09.2020, 23:33. Показов 1421. Ответов 1

Author24 — интернет-сервис помощи студентам
Почему не работает функция удаления?

Задание предполагает создание информационно-справочной системы на базе бинарного файла записей со следующими возможностями: создание файла, просмотр содержимого файла, добавление, удаление и корректировка данных, а также выполнение запросов в соответствии с заданием.


Дан файл, содержащий сведения о химических элементах: название, символическое обозначение, массу атома, заряд ядра.

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <locale.h>
#include <string.h>
 
typedef struct{
    char name[30];
    char symbol[10];
    double weight;
    double charge;
}Element;
 
Element sp;
Element max_el;
void add(FILE* file);
void find(FILE* file);
void allPrint(FILE* file);
void Print(Element sp);
void Mass_Max(FILE* file);
void Delete(char* FileName);
 
 
 
int main(){
    setlocale(LC_ALL, "Rus");
    FILE* file = fopen("Elements.bin", "a+b");
    if (file == NULL) {
        printf("Ошибка открытия файла\n");
        getch();
        return(1);
    }
    int a = 0;
    do {
        printf("Выберите действие:\n");
        printf("1 - запись нового элемента в файл или создание файла\n");
        printf("2 - найти элемент по символьному значению\n");
        printf("3 - вывести весь список\n");
        printf("4 - удалить запись\n");
        printf("5 - выход\n");
        printf("Ваш выбор: ");
        scanf("%d", &a);
        switch (a) {
        case 1: add(file); break;
        case 2: find(file); break;
        case 3: allPrint(file); break;
        case 4: Delete(file); break;
        case 5: break;
        default: printf("Неверная команда! \n");
        }
    } while (a != 5);
    fseek(file, 0, SEEK_END);
    long i = ftell(file);
    if (i > 0) { //файл не пустой
        Mass_Max(file);
    }
    fclose(file);
    system("pause");
    return 0;
}
 
void add(FILE* file) {}
 
void find(FILE* file) {}
 
void Print(Element sp){}
 
void allPrint(FILE* file){}
 
void Mass_Max(FILE* file) {}
 
void Delete(char* FileName)
{
    FILE* tf = fopen(FileName, "r+b");
    Element sp;
    char NameShort[10];
    printf("\n Символьное обозначение: "); scanf("%s", NameShort);
    fread(&sp, sizeof(sp), 1, tf);
    int i = 0;
    while (!feof(tf))
    {
        if (strcmp(NameShort, sp.symbol) == 0)
        {
            long s = sizeof(sp);
            // переходим на начало строки 
            fseek(tf, -s, 1);
            // сохраняем текущее значение указателя 
            long curpos = ftell(tf);
            // переходим в конец файла 
            fseek(tf, 0L, SEEK_END);
            // переходим на начало последней строки 
            fseek(tf, -s, 1);
            // считываем последнюю запись 
            fread(&sp, s, 1, tf);
            // возвращаем указатель на перезаписываемую запись 
            fseek(tf, curpos, SEEK_SET);
            // записываем последнюю запись на место удаляемой 
            fwrite(&sp, s, 1, tf);
            // дескриптор файла 
            int handle = fileno(tf);
            // размер файла 
            long fs = filelength(handle);
            // обрезаем последнюю запись 
            chsize(handle, fs - s);
            break;
        }
        i++;
        fread(&sp, sizeof(sp), 1, tf);
    }
    fclose(tf);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2020, 23:33
Ответы с готовыми решениями:

Удаление записи из файла
при попытке удаления заданной строки из файла вот что получается:всего строк 9 но после ввода...

Удаление записи из бинарного файла
Помогите написать реализацию удаления структуры из массива структур, которые записаны в бинарный...

Удаление записи из массива записи или файла
Доброго времени суток... Задача стоит такая. Есть массив записей, прочитали из файла или так...

Удаление файла записи
Подскажите пожалуйста функцию удаления файла .txt

1
124 / 62 / 17
Регистрация: 05.02.2013
Сообщений: 255
28.09.2020, 10:03 2
Цитата Сообщение от JerryBigbovski Посмотреть сообщение
Почему не работает функция удаления?
C
1
void Delete(char* FileName);  // прототип функции. Обрати внимание на char* FileName
C
1
2
3
4
5
void Delete(char* FileName) // реализация функции
{
    FILE* tf = fopen(FileName, "r+b");
    Element sp;
    char NameShort[10];
......
C
1
2
case 4: Delete(file); break; // А это вызов. Обрати внимание на  file  
                                                // (FILE* file = fopen("Elements.bin", "a+b");)
0
28.09.2020, 10:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2020, 10:03
Помогаю со студенческими работами здесь

Удаление записи из файла
Вот код который добавляет 10 записей в файл..(не компилил, но работать он должен) #include...

Удаление записи из файла
Здравствуйте. Помогите пожалуйста над задачей, которую я не смог написать. Нужно удалить запись из...

Удаление записи из типизированного файла.
Какими способами можно реализовать данную задачу? Из типизированного файла нужно удалить запись,...

Удаление записи из бинарного файла
Задача - удалить запись из бинарного запись по имени find находит запись, которую нужно удалить...

Удаление текущей записи из файла
Добрый день. Имеется файл, выведенный в СтрингГрид. Нужно осуществить удаление текущей записи из...

Удаление записи из бинарного файла
Добрый вечер! У меня проблема не могу удалить из структуры. Добавление и считывание из...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru