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

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

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

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

15.03.2013, 22:15. Просмотров 862. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос fseek не работает (C++):

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

Fseek и структуры - C++
Добрый день,не могу разобраться с fseek в структурах / Нужно сделать запрос (zapros()) n-ой записи через fseek и вывести ее ,либо изменить...

fseek вылетает - C++
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; char *filename; long size; File *in; char *infile; int main(int argc, char *argv) { ...

fseek / fread - C++
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких &quot;записей&quot; в файле (буквы + числа). Нужно с помощью функций...

fseek для ab - C++
Нигде не могу найти работает ли fseek для режима ab??? или у аb статически указатель стоит в конце файла? мне нужно в середину файла...

Функция fseek - C++
Здраствуйте! Пишу сейчас телефонную книгу. Точнее что-то наподобие этого. Появилась проблема. Мне необходимо из файла, в который раннее...

4
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 02:08 #2
Цитата Сообщение от zepterman Посмотреть сообщение
Подскажите, в чем проблема,
В том, что, при открытии существующего файла для записи, его содержимое стирается. fseek в коде работает нормально.
1
Байт
Эксперт C
16150 / 10428 / 1557
Регистрация: 24.12.2010
Сообщений: 19,762
16.03.2013, 10:31 #3
zepterman, Открывай файл в режиме "a". А если ты работаешь в Windows, добавляй "b". Для Linux это тоже не повредит, так что для пущей переносимости открывай в режиме "ab"
1
alsav22
5421 / 4816 / 442
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 21:18
Привет! Вот еще темы с ответами:

Работа с файлами (fseek) - C++
В чем проблема и как ее устранить ? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; ...

работа с fseek и файлами - C++
задача: совершить &quot;прыжок&quot; по строкам файла test.txt (строк, предположим, 20) и считав строку (предположим седьмую) вывести её на экран. ...

Что делает fseek? - C++
Что делает fseek и зачем он нужен? fseek(firstFile,0,SEEK_SET); fseek(secondFile,0,SEEK_SET);

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


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
21.03.2013, 21:18
Ответ Создать тему
Опции темы

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