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

Работа с файлами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Небольшая мелочь по теории http://www.cyberforum.ru/cpp-beginners/thread31992.html
"Какой максимальной длины может быть внешнее имя в программе на С++ в Вашей системе?" - с локальными именами понятно-С++ не накладывает ограничений на размер имён,а что за внешнее имя? Ещё вот недопонимаю вопрос "Нарисуйте граф целых и фундаментальных типов,где от одного типа идёт стрелка к другому,если все значения первого типа могут быть представлены значениями второго в любой...
C++ Задачи на строки и периоды десятичной дроби. 1. Ввести натуральные числа n и m, и напечатать период десятичной дроби m/n, если дробь конечна (до 50 знаков после запятой), то период = 0 2.Получить из слова a, вычёркиванием некоторого кол-ва букв, слова b. Отобразить на экране промежуточные этапы. http://www.cyberforum.ru/cpp-beginners/thread31988.html
Меню C++
Народ помогите написать менюшку.. типо: Start Options Exit Я могу написать только чтением с клавы 1start 2options 3exit А мне надо типо стока бегал, фоном как-то..
C++ Операции с динамической памятью
Есть new и delete. Можно написать так: int *a; a = new int ; Дальше, хотим удалить - пишем delete a; Вопрос такой: а если надо удалить не весь отрезок a..a, а только его "хвост", например a...a - тогда что нужно писать ? (Интересует именно стандартный синтаксис C++, не C).
C++ Сделать вывод и ввод в файл http://www.cyberforum.ru/cpp-beginners/thread31966.html
#include <iostream.h> #include <conio.h> #include <stdlib.h> struct ilist // Создание списочной структуры { float num; // Объявление переменной ilist *next; // Указатель на следующей список };
C++ Генерация чисел Нужно программа для генерации тризначных чисел и таких, что бы в этих числах них не было парных цифр. ТИпу, если число "ХХХ", то "Х" не должно быть парным. подробнее

Показать сообщение отдельно
YurA_280784
Заблокирован
29.04.2009, 11:50     Работа с файлами
Вот что накодил, пишет и читает 100%, удаление ещё не проверял
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
//http://www.cyberforum.ru/cpp/thread31997.html
FILE *f;
typedef struct tagINFO
{
    char nam[64];
    char fam[64];
    char grp[64];
    int  iID;
    int  year;
}INFO;
 
void p1();
void p2();
void p3();
 
bool ftrunc(FILE *f, int bgn, int end);
 
void main()
{
    bool bContinue = true;
    printf("\t\tMenu\r\n");
    printf("1 - Write data in file\r\n");
    printf("2 - Read  data from file\r\n");
    printf("3 - Delete data in file\r\n");
    printf("Any symbol for exit\r\n");
    printf("Note - DataBase must be in the same dirrectory\r\n");
    printf("that program and has name DataBase.txt\r\n");
    switch(getch())
    {
        case 49:p1();break;
        case 50:p2();break;
        case 51:p3();break;
        default:
            bContinue = false;
            break;
    }
    if(bContinue)
        main();
}
 
void p1()
{
    INFO pINFO;
    bool bContinue = true;
    printf("\tWriting data\r\n");
    if(!(f = fopen("DataBase.txt","rb+")))
    {
        if(!(f = fopen("DataBase.txt","wb+")))
            bContinue = false;
    }
    while(bContinue)
    {
        fseek(f,0,SEEK_END);
        printf("Name  \t:");scanf("%s",&pINFO.nam);
        printf("Family\t:");scanf("%s",&pINFO.fam);
        printf("Group \t:");scanf("%s",&pINFO.grp);
        printf("ID    \t:");scanf("%d",&pINFO.iID);
        printf("Year  \t:");scanf("%d",&pINFO.year);
        fwrite(&pINFO,1,sizeof(pINFO),f);
        printf("Writing complete,1 - add more\r\n");
        if(getch() != 49)
            bContinue = false;
    }
    fclose(f);
    
}
 
void p2()
{
    INFO pINFO;
    bool bContinue = true;
    int nCount = -1,num;
    if((f = fopen("DataBase.txt","rb+")))
    {
        fseek(f,0,SEEK_END);
        nCount = ftell(f) / sizeof(pINFO);
        fseek(f,0,SEEK_SET);
        if(0 < nCount)
        {
            while(bContinue)
            {
                printf("Nomer zapisi ot 1 do %d\r\n",nCount);
                scanf("%d",&num);
                if(num <= nCount)
                {
                    fseek(f,(num - 1)*sizeof(pINFO),SEEK_SET);
                    fread(&pINFO,1,sizeof(pINFO),f);
                    printf("Name  \t: %s\r\n",pINFO.nam);
                    printf("Family\t: %s\r\n",pINFO.fam);
                    printf("Group \t: %s\r\n",pINFO.grp);
                    printf("ID    \t: %d\r\n",pINFO.iID);
                    printf("Year  \t: %d\r\n",pINFO.year);
                }
                printf("Reading complete,1 - see more\r\n");
                if(getch() != 49)
                    bContinue = false;
            }
        }
        else
            printf("Basa dannih povrezhdena ili otsytstvyut zapisi\r\n");
    }
    fclose(f);
}
 
void p3()
{
    bool bContinue = true;
    int nCount = -1,num;
 
    if((f = fopen("DataBase.txt","rb+")))
    {
        fseek(f,0,SEEK_END);
        nCount = ftell(f) / sizeof(INFO);
        fseek(f,0,SEEK_SET);
        if(0 < nCount)
        {
            while(bContinue)
            {
                printf("Nomer zapisi ot 1 do %d\r\n",nCount);
                scanf("%d",&num);
                if(num <= nCount)
                {
                    if(ftrunc(f, num*sizeof(INFO), (num + 1)*sizeof(INFO)))
                        nCount--;
                    fseek(f,0,SEEK_END);
                }
                printf("Deleting complete,1 - see more\r\n");
                if(getch() != 49)
                    bContinue = false;
            }
        }
        else
            printf("Basa dannih povrezhdena ili otsytstvyut zapisi\r\n");
    }
    fclose(f);
}
 
bool ftrunc(FILE *f, int bgn, int end)
{
    bool RetVal = false;
    fseek(f,0,SEEK_END);
    int fLen = ftell(f);
    fseek(f,0,SEEK_SET);
 
    void *lBuf = malloc(bgn);
    if(fLen - end < 0)
        end = fLen;
    void *rBuf = malloc(fLen - end);
 
    fread(lBuf,1,bgn,f);
    fseek(f,end,SEEK_SET);
    fread(rBuf,1,fLen - end,f);
    fseek(f,bgn,SEEK_SET);
    if(RetVal = SetEndOfFile((HANDLE)f))
        fwrite(rBuf,1,fLen - end,f);
    return RetVal;
}
Чтение и запись приведена на скриншотах...
Миниатюры
Работа с файлами   Работа с файлами  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru