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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
30.04.2012, 23:10     При записи в начало бинарного файла удаляется все его содержимое #1
Есть бинарный файл, в котором в самом начале 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 :(
Что я не так делаю? Подскажите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 23:10     При записи в начало бинарного файла удаляется все его содержимое
Посмотрите здесь:

переписать содержимое текстового файла в другой текстовый файл,добавляя в начало каждой строки её порядковый номер(с++) C++
Ошибка при чтении/записи из бинарного файла C++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес C++
C++ Удаление записи из бинарного файла
Переписать содержимое файла А в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:11     При записи в начало бинарного файла удаляется все его содержимое #2
C++
1
ofstream fs (fileName, ios::binary | ios::app);
Для добавления в конец.
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
30.04.2012, 23:16  [ТС]     При записи в начало бинарного файла удаляется все его содержимое #3
Shandr_71, спасибо, но теперь значение int записывается не в начало, а в конец файла.
Получается типа этого:
old_int | struct1 | struct2 | struct3 | new_int
а мне нужно вот так:
new_int | struct1 | struct2 | struct3
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:19     При записи в начало бинарного файла удаляется все его содержимое #4
Ну так указатель в файле перемести:
C++
1
fs.seekg(0, ios::beg);
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
30.04.2012, 23:21  [ТС]     При записи в начало бинарного файла удаляется все его содержимое #5
Цитата Сообщение от Shandr_71 Посмотреть сообщение
Ну так указатель в файле перемести:
В том то и дело, что перемещен в самое начало, но пишется всеравно в конец файла. Если не верите, сами попробуйте. Я потому и написал на форум, так как сам не догоняю, почему так...
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:22     При записи в начало бинарного файла удаляется все его содержимое #6
Тысяча извинений, попробуйте не seekg а seekp.
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
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;
Вот все по вашим рекомендациям, а пишет в конец
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
30.04.2012, 23:26     При записи в начало бинарного файла удаляется все его содержимое #8
Хм, ну тогда ios::ate.
Или попробовать через fs.open(" ");
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
30.04.2012, 23:34     При записи в начало бинарного файла удаляется все его содержимое #9
ios::app не позволяет работать с seekp() или Update файла без удаления в нем информации при его октрытии
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 23:38     При записи в начало бинарного файла удаляется все его содержимое
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
30.04.2012, 23:38  [ТС]     При записи в начало бинарного файла удаляется все его содержимое #10
Цитата Сообщение от Shandr_71 Посмотреть сообщение
ну тогда ios::ate.
в этом случае получается то, о чем я в первом посте жаловался. Удаляется все содержимое файла.

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

Добавлено через 4 минуты
урааааа!!!!!!!! MrCold, огромное спасибо за ссылку! Помогло следующее:
Цитата Сообщение от retmas Посмотреть сообщение
ios_base::in | ios_base::out
Yandex
Объявления
30.04.2012, 23:38     При записи в начало бинарного файла удаляется все его содержимое
Ответ Создать тему
Опции темы

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