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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
28.06.2011, 04:48     запись в бинарный файл #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++ Запись в бинарный файл
C++ Запись в бинарный файл
C++ Запись в бинарный файл вектора
Запись в бинарный файл C++
C++ запись в бинарный файл
Запись в бинарный файл C++
C++ Запись текста в бинарный файл
C++ Запись в бинарный файл

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
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     запись в бинарный файл
Ответ Создать тему
Опции темы

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