Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2011, 21:26   #1
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию Работа с бинарным файлом

Есть бинарный файл. Размером он примерно 800 кбайт, но первые 4 байта у него отведены под unsigned int. Как раз эти 4 байта необходимо увеличить на 1. Пытался сделать так:
Код:
void rewrite(void)
{
    FILE* section2 = fopen("section2.bin","ab+");
    if (section2==NULL) {printf("Can't find section2.txt\nExit"); exit(1);}

    fseek(section2, 0L, SEEK_SET);      //Устанавливаем в начало
    //Меняем count
    unsigned int count;
    fread( &count, 4, 1, section2 );    //Читаем count
    printf("begin:%d ",count);
    count++;                            //Увеличиваем
    printf("midle:%d",count);
    fseek(section2, 0L, SEEK_SET);      //Опять устанавливаем позицию чтения/записи в начало
    fwrite(&count,4,1, section2);       //Пишем в файл новый count
    fclose(section2);                   //Сохраняем изменения


    //Смотрим что сделали
    section2 = fopen("section2.bin","ab+");
    fseek(section2, 0L, SEEK_SET);      //Устанавливаем в начало
    //Меняем count
    count=0;
    fread( &count, 4, 1, section2 );    //Читаем count
    printf(" end:%d ",count);

}
Однако count не увеличивается в файле. Можете подсказать в чем проблема? Бинарный файл: http://narod.ru/disk/30828682001/section2.bin.html

Последний раз редактировалось rus_phantom; 07.11.2011 в 21:32.
rus_phantom вне форума Ответить с цитированием
Старый 08.11.2011, 16:06   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

В первой строчке вот так:
FILE* section2 = fopen("section2.bin","r+b");, иначе новый count просто дописывается в конец.
nick42 вне форума Ответить с цитированием
Старый 08.11.2011, 16:46   #3
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию

Но я же установил позицию чтения
Цитата:
fseek(section2, 0L, SEEK_SET);
В начало
rus_phantom вне форума Ответить с цитированием
Старый 08.11.2011, 18:46   #4
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Вот, что в святцах...
Цитата:
r Open for reading only.
w Create for writing. If a file by that name already exists, it will be overwritten.
a Append; open for writing at end-of-file or create for writing if the file does not exist.
r+ Open an existing file for update (reading and writing).
w+ Create a new file for update (reading and writing). If a file by that name already exists, it will be overwritten.
a+ Open for append; open (or create if the file does not exist) for update at the end of the file.
nick42 вне форума Ответить с цитированием
Старый 08.11.2011, 22:05   #5
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию

Спасибо! Помогло. Я всегда думал что "r" только для чтения и "r+" тоже только для чтения
rus_phantom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с бинарным файлом Celestia Общие вопросы Delphi 7 17.01.2011 14:43
Работа с бинарным файлом. griba Помощь студентам 4 11.12.2010 13:08
Работа с бинарным файлом (С) madmonk Помощь студентам 4 20.11.2010 20:58
работа с бинарным файлом Геннадий Win Api 8 22.10.2009 18:49
работа с бинарным файлом Bayazet Помощь студентам 3 17.03.2009 15:37