Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
zepterman
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 27
#1

fseek не работает

15.03.2013, 22:15. Просмотров 1096. Ответов 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);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 22:15
Ответы с готовыми решениями:

C++ текстовые файлы. Не работает fseek
Вот код программы: int main() { f = fopen(&quot;My_file.txt&quot;,&quot;w&quot;); ...

fseek для ab
Нигде не могу найти работает ли fseek для режима ab??? или у аb статически...

fseek / fread
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких...

fseek вылетает
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; char *filename; long size; File...

Fseek и структуры
Добрый день,не могу разобраться с fseek в структурах / Нужно сделать запрос...

4
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 02:08 #2
Цитата Сообщение от zepterman Посмотреть сообщение
Подскажите, в чем проблема,
В том, что, при открытии существующего файла для записи, его содержимое стирается. fseek в коде работает нормально.
1
Байт
Эксперт C
17840 / 11867 / 2467
Регистрация: 24.12.2010
Сообщений: 23,856
16.03.2013, 10:31 #3
zepterman, Открывай файл в режиме "a". А если ты работаешь в Windows, добавляй "b". Для Linux это тоже не повредит, так что для пущей переносимости открывай в режиме "ab"
1
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 11:53 #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);
1
zepterman
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 27
21.03.2013, 21:18  [ТС] #5
Спасибо!
0
21.03.2013, 21:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 21:18

Функция fseek
Здраствуйте! Пишу сейчас телефонную книгу. Точнее что-то наподобие этого....

Функции fseek, _fseeki64
Ребят как по умному объяснить преподавателю что я использую функцию _fseeki64...

Fseek() для ifstream
Знаю, что есть два вида открытия и закрытие файла. 1) Это чистый Си, когда: ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru