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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zepterman
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 27
#1

fseek не работает - C++

15.03.2013, 22:15. Просмотров 770. Ответов 4
Метки нет (Все метки)

Нужно записать данные в структурированный текстовый файл.
Проблема заключается в том, что в части ввод данных, функция fseek не отрабатывает.
Если в части ввод данных не закрывать файл, а писать сразу все элементы - все нормально, но файл нужно закрывать (такое условие задачи).
Подскажите, в чем проблема, пожалуйста.

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
struct Man
{
    char name[40];
    int age;
};
 
//создание данных
        Man AAA;
    AAA.age=20;
    strcpy(AAA.name, "Jack");
 
    Man BBB;
    BBB.age=30;
    strcpy(BBB.name, "Frank");
 
    Man *CCC;
    CCC = new Man;
    CCC->age=25;
    strcpy(CCC->name, "Jovani");
 
    Man TTT;
 
// ввод данных
    FILE *f=fopen("man.txt", "w");
    fseek(f,1*sizeof(Man),0);
    fwrite(&AAA,sizeof(Man),1,f);
    fclose(f);
 
    f=fopen("man.txt", "w");
    fseek(f,2*sizeof(Man),0);
    fwrite(&BBB,sizeof(Man),1,f);
    fclose(f);
 
    f=fopen("man.txt", "w");
    fseek(f,3*sizeof(Man),0);
    fwrite(CCC,sizeof(Man),1,f);
    fclose(f);
 
//вывод данных
    f = fopen("man.txt", "r");
    long size, count = 0;
    fseek(f, 0, SEEK_END);
    size = ftell(f);
    fseek(f, 0, SEEK_SET);
 
    while (size > count * sizeof(Man))
    {
        fread(&TTT, sizeof(Man), 1, f);
        cout<< "Name: "<< TTT.name<< endl;
        cout<< "Age: "<< TTT.age<< endl;
        count++;
        fseek(f, count * sizeof(Man), SEEK_SET);
    } 
 
    fclose(f);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 22:15     fseek не работает
Посмотрите здесь:

fseek вылетает C++
работа с fseek и файлами C++
Функция fseek C++
C++ fseek / fread
Не могу разобраться с функцией fseek C++
C++ Работа с файлами (fseek)
C++ C++ текстовые файлы. Не работает fseek
C++ fseek для ab
C++ Функции fseek, _fseeki64
Fseek() для ifstream C++
Что делает fseek? C++
C++ Fseek и структуры

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 02:08     fseek не работает #2
Цитата Сообщение от zepterman Посмотреть сообщение
Подскажите, в чем проблема,
В том, что, при открытии существующего файла для записи, его содержимое стирается. fseek в коде работает нормально.
Байт
Эксперт C
 Аватар для Байт
15056 / 9458 / 1384
Регистрация: 24.12.2010
Сообщений: 17,505
16.03.2013, 10:31     fseek не работает #3
zepterman, Открывай файл в режиме "a". А если ты работаешь в Windows, добавляй "b". Для Linux это тоже не повредит, так что для пущей переносимости открывай в режиме "ab"
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 11:53     fseek не работает #4
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
//создание данных
    Man AAA;
    AAA.age=20;
    strcpy(AAA.name, "Jack");
 
    Man BBB;
    BBB.age=30;
    strcpy(BBB.name, "Frank");
 
    Man *CCC;
    CCC = new Man;
    CCC->age=25;
    strcpy(CCC->name, "Jovani");
 
    Man TTT;
 
// ввод данных
    FILE *f=fopen("man.txt", "wb");
    fwrite(&AAA,sizeof(Man),1,f);
    fclose(f);
 
    f=fopen("man.txt", "ab");
    //fseek(f,1*sizeof(Man),0);
    fwrite(&BBB,sizeof(Man),1,f);
    fclose(f);
 
    f=fopen("man.txt", "ab");
    //fseek(f,2*sizeof(Man),0);
    fwrite(CCC,sizeof(Man),1,f);
    fclose(f);
 
//вывод данных
    f = fopen("man.txt", "rb");
    long size, count = 0;
    fseek(f, 0, SEEK_END);
    size = ftell(f);
    fseek(f, 0, SEEK_SET);
 
    while (size > count * sizeof(Man))
    {
        fread(&TTT, sizeof(Man), 1, f);
        cout<< "Name: "<< TTT.name<< endl;
        cout<< "Age: "<< TTT.age<< endl;
        count++;
        fseek(f, count * sizeof(Man), SEEK_SET);
    } 
 
    fclose(f);
zepterman
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 27
21.03.2013, 21:18  [ТС]     fseek не работает #5
Спасибо!
Yandex
Объявления
21.03.2013, 21:18     fseek не работает
Ответ Создать тему
Опции темы

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