Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> fread() и fwrite() 
V
    Опции темы
ressac
Дата 16.4.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



да, последний fread читает...
PM MAIL   Вверх
zim22
Дата 16.4.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(ressac @  16.4.2009,  12:28 Найти цитируемый пост)
да, последний fread читает...

Anikmar прав. попробуйте закомментировать злосчастный fseek. и вы увидите, что не fread не читает, а fwrite не пишет
Код
size_t res = 0;
        fseek(f,sizeof(TPersona)*i,SEEK_SET);
        printf("\n\n %i",ftell(f));
        res = fread(&p,sizeof(TPersona),1,f);
        printf("\n\n %i",ftell(f));

       // fseek(f,sizeof(TPersona)*(i+1),SEEK_SET);
        printf("\n\n %i",ftell(f));
        res = fwrite(&p,sizeof(TPersona),1,f);
        printf("\n\n %i",ftell(f));



Это сообщение отредактировал(а) zim22 - 16.4.2009, 12:33


--------------------
PM MAIL   Вверх
Anikmar
Дата 16.4.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Этот fseek, я так понимаю, нужен, чтобы увеличить размер файла - выйти за его границу для добавления информации. В середине файла он ничего не делает, а вот в конце файла - нужен.

Добавлено @ 12:43
Цитата(ressac @  16.4.2009,  12:28 Найти цитируемый пост)
да, последний fread читает... 

Последний понятно - цикл идет с конца к наячалу. Первый смотрите.

Это сообщение отредактировал(а) Anikmar - 16.4.2009, 12:43
PM MAIL ICQ   Вверх
ressac
Дата 30.4.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



я так и не понял, можно ещё раз?
PM MAIL   Вверх
zim22
Дата 30.4.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(ressac @  30.4.2009,  11:30 Найти цитируемый пост)
я так и не понял, можно ещё раз?

функции fread и fwrite возвращают количество байт, которые они записали/прочитали.
измените свой код так, чтобы он отображал эти значения и вы увидите, что в одном случае всё нормально, а вдругом - не очень.


--------------------
PM MAIL   Вверх
ressac
Дата 30.4.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



ну в одном возрващает "1" а в другом "0"

только что это значит smile ?
PM MAIL   Вверх
zim22
Дата 30.4.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(ressac @  30.4.2009,  12:36 Найти цитируемый пост)
только что это значит


Цитата(zim22 @  30.4.2009,  12:06 Найти цитируемый пост)
функции fread и fwrite возвращают количество байт, которые они записали/прочитали.

это и значит.


--------------------
PM MAIL   Вверх
math64
Дата 30.4.2009, 12:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



fread и fwrite возвращают число записей, т. е. 1 - записана 1 запись, 0 - запись не записана или записана не целиком.
Чтобы знать число байт установите параметр size в 1
PM   Вверх
ressac
Дата 30.4.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



Ну да , всё сходится вообщем и fread и fwrite  возвращают "1".
ну а вопрос серовно открыт
PM MAIL   Вверх
ressac
Дата 8.5.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



http://www.opengroup.org/onlinepubs/799098.../xsh/fopen.html

"When a file is opened with update mode (+ as the second or third character in the mode argument), both input and output may be performed on the associated stream. However, output must not be directly followed by input without an intervening call to fflush() or to a file positioning function (.Fn fseek , fsetpos() or rewind()), and input must not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file. "


вот теперь, я могу спать спокойно
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.