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

fopen() - открыть с дозаписью - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
qANGELp
0 / 0 / 0
Регистрация: 24.05.2013
Сообщений: 9
28.11.2013, 20:09     fopen() - открыть с дозаписью #1
Здравствуйте, извините за нубовский вопрос. у меня следующая проблема:
Есть бинарный файл. в процессе работы с ним нужно по всему ему бегать и что-то писать, что-то читать.
Файл можно открыть с ключиками
"r" Открывает текстовый файл для чтения
"w" Создает текстовый файл для записи
"a" Дописывает в текстовый файл
"rb" Открывает двоичный файл для чтения
"wb" Создает двоичный файл для записи
"ab" Дописывает в двоичный файл
"r+" Открывает текстовый файл для чтения и записи
"w+" Создает текстовый файл для чтения и записи
"a+" Открывает текстовый файл для чтения и записи
"rb+" или "r+b" Открывает двоичный файл для чтения и записи
"wb+" или "w+b" Создает двоичный файл для чтения и записи
"ab+" или "a+b" Открывает двоичный файл для чтения и записи
Логически подумав я принял решение что из этого всего мне подходит "ab+" или "a+b".
для позиционирования по файлу использую fseek(). Но вот в чем беда.

Код
//pos - позиция для чтения/записи
//Val - переменная для чтения/записи


fseek(fs, pos , SEEK_SET); //устанавливаем курсор в нужную позицию
fread(&Val, 1, 1, fs);         //Читаем текущее значение
...
fseek(fs, pos , SEEK_SET); //устанавливаем курсор в нужную позицию
fwrite(&Val, 1, 1, fs);        //Записываем данные
Вышеприведенный код записывает данные не в позицию, которую я указал, а в конец файла, в то время как мне нужно, чтоб в указную.

Как можно заставить писать в указанную позицию?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 20:09     fopen() - открыть с дозаписью
Посмотрите здесь:

fopen() C++
C++ Прописывания директории в fopen
вопрос по fopen C++
C++ fopen
C++ FOPEN не то открывает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
28.11.2013, 20:12     fopen() - открыть с дозаписью #2
qANGELp, вообще при записи на позицию N он будет ПЕРЕзаписывать (насколько я помню и понимаю), а не записывать. Более того, если работаете с файлами в w/r режиме, то после каждого write используйте fflush() - она сбрасывает кэшированные данные в файл, иначе после последующего fseek/fread получите дикий мусор и, как я, будете месяц мучаться. Я всех преподов в университете задолбал с этим вопросом, пока не помогли люди добрые здесь >_<
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2013, 20:18     fopen() - открыть с дозаписью #3
Цитата Сообщение от qANGELp Посмотреть сообщение
Логически подумав я принял решение что из этого всего мне подходит "ab+" или "a+b".
При дозаписи пишет только в конец файла, читает из любого места. Открывайте "rb+". И учитывайте то, о чём nexen написал.
qANGELp
0 / 0 / 0
Регистрация: 24.05.2013
Сообщений: 9
28.11.2013, 20:28  [ТС]     fopen() - открыть с дозаписью #4
Спасибо вам огромное. пол дня не мог понять в чем проблема. теперь все работает
Yandex
Объявления
28.11.2013, 20:28     fopen() - открыть с дозаписью
Ответ Создать тему
Опции темы

Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru