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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
#1

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

28.06.2011, 04:48. Просмотров 2034. Ответов 1
Метки нет (Все метки)

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

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include "conio.h"
using namespace std;
 
struct scan_info{
char model[25]; // наименование модели 25 байт
int price; // цена 4 байта
double x_size; // горизонтальный размер области сканирования 8 байт
double y_size; // вертикальный размер области сканирования 8 байт
int optr; // оптическое разрешение 4 байта
int grey; // число градаций серого 4 байта
bool YesData; //левая переменная 1 байт
};//54 байта
 
void InBinFile(char * FileName, vector<scan_info> mass, short Count);
vector<scan_info> insert(int position,vector<scan_info> mass,scan_info *Data);
void SetNull(scan_info *Data);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<scan_info> Arr;
    setlocale(LC_ALL, "Rus");
    short count=0;
    int position;
    char FileName[80];
    int choice;
    cout<<"Введите имя файла"<<endl;
    cin>>FileName;
    cout<<"Выберите действие: 1-Добавить блок данных, 2-Выход"<<endl;
    cin>>choice;
    while(choice==1) //заполняем структуру
    {
                count=count+1;
                scan_info* MyScan=new scan_info;
                cout<<"Модель: "<<endl;
                cin>>MyScan->model;
                cout<<"Цена: "<<endl;
                cin>>MyScan->price;
                cout<<"Длина: "<<endl;
                cin>>MyScan->x_size;
                cout<<"Ширина: "<<endl;
                cin>>MyScan->y_size;
                cout<<"Оптическое разрешение: "<<endl;
                cin>>MyScan->optr;
                cout<<"Число градаций серого: "<<endl;
                cin>>MyScan->grey;
                cout<<"Введите позицию в бинарном файле, куда будет помещен блок данных: ";
                MyScan->YesData=true;
                cin>>position;
                Arr=insert(position,Arr,MyScan);
                //Arr.push_back(*MyScan);
                cout<<"Выберите действие: 1-Добавить блок данных, 2-Выход"<<endl;
                cin>>choice;
    }
    InBinFile(FileName,Arr,count);
}
 
void InBinFile(char * FileName, vector<scan_info> mass, short Count)//запись в файл
{
    ofstream fout(FileName,ios::binary);
    if(!fout)
    {
        cout<<"Unable to open "<<FileName<<" for writing.\n";
        return;
    }
    fout<<Count<<endl;
    vector<scan_info>::iterator in=mass.begin();
    while(in!=mass.end())
    {
        //fileout.write((char*)&Count,sizeof Count);
        fout.write((char *)&in,sizeof(scan_info));
        ++in;
    }
    fout.close();
 
}
 
void SetNull(scan_info *Data)//обнуление полей структуры
{
    for(int i=0;i<25;i++)
        Data->model[i]=0;
    Data->price=0;
    Data->grey=0;
    Data->optr=0;
    Data->x_size=0;
    Data->y_size=0;
    Data->YesData=false;
}
 
vector<scan_info> insert(int position,vector<scan_info> mass,scan_info *Data)//заносим данные в вектор
{
    int i=0;
    int size=mass.size();
    scan_info* NullScan=new scan_info;
    SetNull(NullScan);
    if(size<=position)
    {
        while(i!=position-size)
        {
            mass.push_back(*NullScan);
            i++;
            
        }
        mass.push_back(*Data);
    }
    
    else
    {
        mass.at(position)=*Data;
    }
    return mass;
}
Проблема возникает именно на выводе в файл. В результате в нем оказывается что-то совершенно не то(не нулей, не вводимых данных). Хотя вектор верно заполняется. Может я write как-то неправильно использую или экземпляр ofstream не так создаю.

Подскажите плз в чем косяк-то или я чет не догоняю может
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2011, 04:48     Запись в бинарный файл
Посмотрите здесь:

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

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

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

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

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

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

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

Запись структуры в бинарный файл - C++
Добрый вечере,народ. Нужна функция,которая будет записывать структуру в бинарный файл.То есть пользователь выбирает пункт &quot;Save to File&quot; и...

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

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

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

Запись текста в бинарный файл - C++
Есть программа, она должна записывать в бин файл, обычную строку. #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;fstream&gt; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
28.06.2011, 08:54     Запись в бинарный файл #2
C++
1
2
3
4
5
6
7
vector<scan_info>::iterator in=mass.begin();
        while(in!=mass.end())
        {
                //fileout.write((char*)&Count,sizeof Count);
                fout.write((char *)&in,sizeof(scan_info));
                ++in;
        }
Итератор ты выводишь, а не данные
Yandex
Объявления
28.06.2011, 08:54     Запись в бинарный файл
Ответ Создать тему
Опции темы

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