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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Tolias28
206 / 122 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
#1

При записи в начало бинарного файла удаляется все его содержимое - C++

30.04.2012, 23:10. Просмотров 1178. Ответов 9
Метки нет (Все метки)

Есть бинарный файл, в котором в самом начале 2 байта отделены для значения int, а далее идут структуры. Нужно сменить это значение int в начале файла так, чтобы всё остальное содержимое осталось на месте. Но у меня не получается Так как при выполнении следующего кода в файле остается только само значение int, а после него конец файла.

C++
1
2
3
4
5
6
7
8
9
10
11
ofstream fs (fileName, ios::binary);
if (!fs.is_open())
{
    cout << "Unable to open file \"" << fileName << "\"" << endl;
    return;
}
 
count++;
fs.seekp(0, ios::beg);
fs << count; //тут я пытаюсь записать число в начало файла.
//После этой строки содержимое файла утрачивается и остается только значение count :(
Что я не так делаю? Подскажите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 23:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При записи в начало бинарного файла удаляется все его содержимое (C++):

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

Ошибка при чтении/записи из бинарного файла - C++
Сделал простую программу для работы с бинарными файлами, но когда запускаю ее вылетает ошибка. Сделать проще уже некуда, в чем проблема? ...

Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес - C++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n)....

Редактирование записи бинарного файла - C++
Здравствуйте. Подскажите пожалуйста, мне надо призвести редактирование записи в файле, данные в файл заношу через структуру: struct TZap{...

Удаление записи из бинарного файла - C++
Задача - удалить запись из бинарного запись по имени find находит запись, которую нужно удалить cur - текущая позиция del - удаляемая...

Удаление записи из бинарного файла - C++
Добрый вечер! У меня проблема не могу удалить из структуры. Добавление и считывание из бинарного файла я сделал. Удаление не...

9
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:11 #2
C++
1
ofstream fs (fileName, ios::binary | ios::app);
Для добавления в конец.
1
Tolias28
206 / 122 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
30.04.2012, 23:16  [ТС] #3
Shandr_71, спасибо, но теперь значение int записывается не в начало, а в конец файла.
Получается типа этого:
old_int | struct1 | struct2 | struct3 | new_int
а мне нужно вот так:
new_int | struct1 | struct2 | struct3
0
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:19 #4
Ну так указатель в файле перемести:
C++
1
fs.seekg(0, ios::beg);
0
Tolias28
206 / 122 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
30.04.2012, 23:21  [ТС] #5
Цитата Сообщение от Shandr_71 Посмотреть сообщение
Ну так указатель в файле перемести:
В том то и дело, что перемещен в самое начало, но пишется всеравно в конец файла. Если не верите, сами попробуйте. Я потому и написал на форум, так как сам не догоняю, почему так...
0
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:22 #6
Тысяча извинений, попробуйте не seekg а seekp.
0
Tolias28
206 / 122 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
30.04.2012, 23:26  [ТС] #7
Цитата Сообщение от Shandr_71 Посмотреть сообщение
попробуйте не seekg а seekp.
я понял, что вы ошиблись. Я seekp пробовал - пишет в конец файла, если задан ios::app

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
ofstream fs (fileName, ios::binary | ios::app);
        if (!fs.is_open())
        {
            cout << "Unable to open file \"" << fileName << "\"" << endl;
            return;
        }
count++;
        fs.seekp(0, ios::beg);
        fs << count;
Вот все по вашим рекомендациям, а пишет в конец
0
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:26 #8
Хм, ну тогда ios::ate.
Или попробовать через fs.open(" ");
0
Tolias28
206 / 122 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
30.04.2012, 23:38  [ТС] #10
Цитата Сообщение от Shandr_71 Посмотреть сообщение
ну тогда ios::ate.
в этом случае получается то, о чем я в первом посте жаловался. Удаляется все содержимое файла.

P.S. У меня складывается впечатление, что вы сидите там без среды и компилятора и пишете сюда свои догадки, а я проверяю, получилось ли вам отгадать

Добавлено через 4 минуты
урааааа!!!!!!!! MrCold, огромное спасибо за ссылку! Помогло следующее:
Цитата Сообщение от retmas Посмотреть сообщение
ios_base::in | ios_base::out
0
30.04.2012, 23:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 23:38
Привет! Вот еще темы с ответами:

Переписать содержимое файла А в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания - C++
Дан текстовый файл А. Переписать его содержимое в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания. ...

переписать содержимое текстового файла в другой текстовый файл,добавляя в начало каждой строки её порядковый номер(с++) - C++
переписать содержимое текстового файла в другой текстовый файл,добавляя в начало каждой строки её порядковый номер

Заполнение бинарного файла структурой и вывод его на экран - C++
мне нужно создать бинарник с заполненной структурой. вроде, заполняю правильно, а с выводом на экран не разобрался, да и как мне потом...

Предусмотреть в программе просмотр бинарного файла и выполнить его обработку - C++
Имеется информация о телевизорах на складе: наименование, фирма изготовитель, стоимость, размер экрана, количество на складе. Для описания...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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