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

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

Войти
Регистрация
Восстановить пароль
 
albannikov
12 / 12 / 2
Регистрация: 20.12.2012
Сообщений: 90
#1

Запись в бинарный файл - C++

23.10.2013, 13:35. Просмотров 1208. Ответов 11
Метки нет (Все метки)

Всем привет.
Подскажите пожалста как через fstream добавить запись в бинарный файл ? нужно добавить именно В НАЧАЛО , не очищая содержимое файла.

У меня получается только в конец файла. А в начало как? а то намучался уже...
(с бинарным файлом работаю)


C++
1
2
3
4
5
           fstream bfile;
 
    bfile.open("base.bin", ios::beg);   // Я ЖЕ ТУТ КУРСОР В НАЧАЛО ФАЙЛА СТАВЛЮ! или нет?  
    bfile.write((char * ) "Что нибудь", sizeof(int));   
    bfile.close();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в бинарный файл (C++):

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

Запись в бинарный файл - C++
Здравствуйте. Прошу помочь разобраться с проблемой. Необходимо записать в двоичный файл 8-байтовое число, но не как строку, а...

Запись в бинарный файл - C++
Подскажите как записать данные из StringGrid в бинарный файл и компоновка допустим из 2 StringGrid построчно

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

Запись в бинарный файл - C++
Подскажите пожалуйста,где в коде ошибка??никак найти не могу почему х не считает. В файл записываются 0. Задние на картинке. #include...

Запись в бинарный файл - C++
Помогите приделает функцию что бы она записывала не в обычный файл а в бинарный, уже три чеса сижу выходит ерунда. Надо еще что бы при...

11
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,068
Завершенные тесты: 1
23.10.2013, 15:16 #2
C++
1
bfile.open ("base.bin", std::fstream::in | std::fstream::out | std::fstream::beg);
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 15:43 #3
При открытии без дополнительных параметров(курсор в конце, дозапись) и так в начале будет.

Добавлено через 2 минуты
Только открывайте в бинарном режиме:
C++
1
fstream bfile("base.bin", ios::in | ios::out | ios::binary);
1
albannikov
12 / 12 / 2
Регистрация: 20.12.2012
Сообщений: 90
24.10.2013, 12:59  [ТС] #4
СПАСИБО, получилось
Работает так
C++
1
bfile.open ("base.bin", std::fstream::in | std::fstream::out | std::fstream::beg);
и так
C++
1
bfile.open("base.bin", ios::in | ios::out | ios::binary);
Только объясните пожалста разницу между двумя этими строками ...
во второй строке я указываю, что файл бинарный (ios::binary), но первая строка ведь тоже работает...

Добавлено через 3 часа 53 минуты
Оказывается сейчас переписывается начало файла, а мне нужно смещать содержимое, т.е. информация должна подвинуться, а не затираться новой.
Как реализовать , подскажите пожалста?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 13:05 #5
Цитата Сообщение от albannikov Посмотреть сообщение
но первая строка ведь тоже работает...
И что с того? Пишите\читаете в бинарном режиме - в таком режим и файл открывайте.
Цитата Сообщение от albannikov Посмотреть сообщение
Только объясните пожалста разницу между двумя этими строками ...
Разница между открытием в текстовом режиме и в бинарном.

Добавлено через 3 минуты
Цитата Сообщение от albannikov Посмотреть сообщение
Оказывается сейчас переписывается начало файла, а мне нужно смещать содержимое, т.е. информация должна подвинуться, а не затираться новой.
Как реализовать , подскажите пожалста?
Перезаписывать весь файл.
1
albannikov
12 / 12 / 2
Регистрация: 20.12.2012
Сообщений: 90
24.10.2013, 13:49  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Перезаписывать весь файл.
Забирать содержимое файла в структуру например , писать новую инфу, затем выгружать из структуры остальные данные?
Должен же быть вариант дозаписи со смещением содержимого.. неужто в великом и могучем С++ такого не реализовано?
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,068
Завершенные тесты: 1
24.10.2013, 13:59 #7
Цитата Сообщение от albannikov Посмотреть сообщение
неужто в великом и могучем С++ такого не реализовано?
такого вообще в файловой системе не реализовано) - нельзя физически сдвинуть файл(так чтобы спереди осталось место) - для большего размера необходимо большее место, с учетом фрагментации это невозможно, надо заново переписывать файл
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 13:59 #8
Цитата Сообщение от albannikov Посмотреть сообщение
неужто в великом и могучем С++ такого не реализовано?
А вы тогда чем будете заниматься?
Есть способы более простые и более сложные. Один из простых вы описали. Более сложные - это перезапись блоками, со смещением, начиная с конца файла.
1
albannikov
12 / 12 / 2
Регистрация: 20.12.2012
Сообщений: 90
24.10.2013, 14:29  [ТС] #9
СПАСИБО, видимо так и придётся делать.
Сейчас другой вопрос возник, шобы тему не создавать спрошу тут...

Что то с кодировкой видимо не так ... когда в файл записываю данные, пишутся вместо Русских символов иероглифы (англ. и цифры без проблем пишет).. где поискать проблему можно?

ЗЫ.: когда из текстовика в бинарный передаю с Русским проблем нету... только при вводе данных с консоли такая беда

Вот код на всякий случай:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void AddBin()                                                   // Запись в BIN новой строки
{   
    system("CLS");
    setlocale( LC_ALL,"Russian" );  // Русские символы
    fstream bfile;
    SNew New;
    bfile.open("base.bin", ios::in | ios::out | ios::beg);  
    unsigned int kol = KOL;
 
    cout << "Тип? :         ";
    cin >> New.tip;
 
    cout << "Фирма? :       ";
    cin >> New.firma;
 
    cout << "Модель? :      ";
    cin >> New.model;
 
    cout << "Год? :         ";
    cin >> New.god;
 
    cout << "Серийный номер? :  ";
    cin >> New.serial;
 
    cout << "Инвентарный номер? :   ";
    cin >> New.inventar;
 
    cout << "Состояние (норм)? :    ";
    cin >> New.sost;
    
    cout << "Рейтинг? :     ";
    cin >> New.sred;
 
    SetColor(14,0);
    cout << endl << "Сейчас запишем :-)" << endl;   
 
    bfile.write ((char *) &kol, sizeof(unsigned int));      
    bfile.write ((char * ) &New, sizeof(SNew));     
    
    bfile.close();  
    dialog();   
}
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 14:39 #10
Цитата Сообщение от albannikov Посмотреть сообщение
setlocale( LC_ALL,"Russian" ); // Русские символы
Только на вывод. Для ввода и вывода по русски:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console
1
albannikov
12 / 12 / 2
Регистрация: 20.12.2012
Сообщений: 90
24.10.2013, 14:45  [ТС] #11
и в очередной раз СПАСИБО, помогло
А можно указать в коде , шобы программа както сама выбирала и устанавливала шрифт Lucida Console? ... а то на каждом компе не будут же в настройки консоли лезть..
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 14:52 #12
Цитата Сообщение от albannikov Посмотреть сообщение
А можно указать в коде , шобы программа както сама выбирала и устанавливала шрифт Lucida Console?
Нет.

Добавлено через 24 секунды
Цитата Сообщение от albannikov Посмотреть сообщение
а то на каждом компе не будут же в настройки консоли лезть..
Больная тема...

Добавлено через 3 минуты
Есть ещё способ CharToOem(), OemToChar, но я им не пользуюсь, поэтому ничего об этом не могу сказать. Поищите в инете информацию.
1
24.10.2013, 14:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 14:52
Привет! Вот еще темы с ответами:

Запись в бинарный файл - C++
Скажите пожалуйста, правильно ли работает моя программа? (Имеется ввиду запись в бинарный файл) #include &quot;stdafx.h&quot; #include...

Запись string в бинарный файл - C++
Есть структура: struct Anketa { std::string name, family, brith_Date, tel; }; Надо что бы они записывали в бинарный файл...

Запись вектора в бинарный файл - C++
Здравствуйте, не получаеться написать нормальную запись в файл вектора из обьектов класа. Вот сам клас: public class Human { ...

Запись классов в бинарный файл - C++
Привет у меня такая проблема я вроде всё сделал правильно но у меня всё равно чтение не идёт из файла. //emp.h -- заголовочный файл для...


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

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

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