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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с циклическим файлом на Си 
:(
    Опции темы
Гость_Вова
Дата 11.8.2005, 18:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди! Помогите!
Может кто-то умный поможет!

Мне нужно организовать ратоу с циклическим файлом!
То-есть записываю в начало файла запись, затем еще и так далее, пока не запишу, например 20 записей, пишем уже на место первой записи (Понятно, что размер записи одинаковый)

С уважением, Владимир
  Вверх
Fixin
Дата 11.8.2005, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Хм. Мне для примера нужно, так что может напишу.
PM MAIL ICQ   Вверх
Mayk
Дата 11.8.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Если я правильно понял, то что-то типа того
Код

const int recs_per_file=20;
void save_record(FILE* f, record_t* rec, int recn)
{    
    fwrite(f, sizeof(*rec),1,f);
    if(recn % recs_per_file == 0)
        fseek(f,0,SEEK_SET);
}

Ну или rewind(f); вместо fseek'а.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Guest
Дата 11.8.2005, 18:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Плиз! Брось этот пример! Или хотя бы скажи, как организовать удаление первой записи и вместо нее записать новую!
  Вверх
Guest
Дата 11.8.2005, 18:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А что fwrite(f, sizeof(*rec),1,f); перезаписывает сверху запись? А не сдвигает записи????
Я думал, что получиться так :

21 запись
1 запись
2 запись
......
20 запись

или я не прав? или получиться:

21 запись
2 запись
......
20 запись ???????

  Вверх
Fixin
Дата 11.8.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Тут нужно использовать функцию seek(). Но я рассчитываю на небольшой файл, потому просто буду копировать исходный по записям и заменять нужную запись, потом переименовывать временный файл в исходный.
PM MAIL ICQ   Вверх
Guest
Дата 11.8.2005, 18:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ЭЭЭЭ, вариант :

Но я рассчитываю на небольшой файл, потому просто буду копировать исходный по записям и заменять нужную запись, потом переименовывать временный файл в исходный.

Не подходит!
ФАЙЛ большой!!!!
  Вверх
Fixin
Дата 11.8.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Цитата
Я думал, что получиться так
Проверь.

Это сообщение отредактировал(а) Fixin - 11.8.2005, 18:21
PM MAIL ICQ   Вверх
Mayk
Дата 11.8.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Guest @ 11.8.2005, 22:18)
А что fwrite(f, sizeof(*rec),1,f); перезаписывает сверху запись? А не сдвигает записи????

Ну да, перезаписывает.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 11.8.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Mayk нормальный вариант предложил. перезапись части конечно лучше чем всего файла


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fixin
Дата 11.8.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Думаю, имелось ввиду это:
Код
const int recs_per_file=20;
void save_record(FILE* f, record_t* rec, int recn)
{  
     recn = recn%recs_per_file;
     fseek(f, sizeof(record_t)*recn),SEEK_SET);  
     fwrite(f, sizeof(record_t),1,f);
}


Это сообщение отредактировал(а) Fixin - 11.8.2005, 18:27
PM MAIL ICQ   Вверх
Guest
Дата 11.8.2005, 18:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Что-то не работает smile

test = fopen ("test","ab");

s.c[0]='a';
s.c[1]='a';
s.c[2]='a';

rewind(test);

fwrite(&s, sizeof(s), 1, test);

fclose(test);

Пишит в конец файла!!!
  Вверх
comcon1
Дата 11.8.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



Код

test = fopen ("test","ab");

Поиграй вторым параметром. Тебе скорее w+, чем а.


--------------------
PM MAIL   Вверх
Guest
Дата 11.8.2005, 18:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











test = fopen ("test","w+");
Затирает все!!! И пошет сначала
  Вверх
sergejzr
Дата 11.8.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



пользуйся fseek им точно можно по всему файлу ходить как вздумается.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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