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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
Viktory12345
7 / 7 / 1
Регистрация: 11.12.2009
Сообщений: 41
#1

Бинарные файлы, чтение и запись - C++

05.11.2010, 17:54. Просмотров 2703. Ответов 2
Метки нет (Все метки)

Доброго времени суток.
Подскажите пожалуйста, как организовать побайтовое чтение и запись данных в бинарный файл.
Правильно ли будет организовано чтение(запись), когда используются
C++
1
2
in.read((char*)&сh,1*sizeof(__int8));
out.write((char*)&сh,1*sizeof(__int8));
Будет ли в этом случае каретка автоматически переходить на следующий символ?
PS программа на С++

Добавлено через 4 часа 4 минуты
Вот код программы, вроде бы получилось записывать и считывать побайтово.
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
#pragma hdrstop
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <tchar.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
const  int count=16;
int _tmain(int argc, _TCHAR* argv[])
{
__int8 mas[count]={0xBB,0x9,0x0,          
           0xB9,0x3,0x0,                   
           0xB8,0x3C,0x0,           
           0xF7,0xF1,           
           0xD1,0xD8,           
           0xD0,0xDB,           
           0x90};               
 
__int8 ch;
int i;
ofstream out("ex.dat", ios::binary);
for(i=0;i<count;i++)
    {
    ch=mas[i];
    out.write((char*)&ch,sizeof(__int8));
    }
 
out.close();
 
ifstream in("ex.dat", ios::binary);
i=0;
    while(in.good())
    {
        in.read((char*)&ch,sizeof(__int8));
        cout<<hex<<int(ch)<<endl;
        i++;
 
           getch();
    }
 
in.close();
 
return 0;
}
Однако смущают выводимые данные.
ffffffbb
9
0
ffffffb9
3
0
ffffffb8
3c
0
fffffff7
fffffff1
ffffffd1
ffffffd8
ffffffd0
ffffffdb
ffffff90
ffffff90

Т.е. считывается на 1 байт больше, чем было записано. И непонятно откуда вылазит последовательность "FFFFFF".
Прошу помощи у Вас, потому что я уже перепробывала все имеющиеся у меня варианты.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2010, 17:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарные файлы, чтение и запись (C++):

fwrite\fread: чтение и запись в бинарные файлы - C++
Добрый день. Пытаюсь разобратся с чтением и записью в бинарные файлы.. в общем обрисую в краце проблему, записываю класс. class tPoint ...

Бинарные файлы. Чтение - C++
Дан бинарный файл, компонентами которого являются массивы действительных чисел. Вычислить для каждого массива число отрицательных...

Бинарные чтение/запись объектов - C++
Всем привет. Люди добрые - поможите пожалуйста :) Написал такой код: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; ...

Бинарные запись и чтение структуры в файл - C++
Записываю структуру в файл.. нужно прочитать.. но он не читает... если delete n; убрать, то &quot;Нарушение прав доступа при записи&quot;. delete n...

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

Запись массивов в бинарные файлы - C++
Добрый день. Пытаюсь написать программу для записи массива в бинарный файл. Выдаёт ошибку: что-то не так с буффером. int main() { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 18:51 #2
Ну у меня несколько замечаний по вашему коду, во-первых sizeof(__int8) == 1, во-вторых зачем записывать побайтово, все наоборот стараются как можно больше за раз прочитать/записать, а у вас тут наоборот, возможность -то ведь есть

Опять же проверять после вызова read() неплохо бы вызвать gcount(), который скажет сколько было байт прочитано, и если ничего не прочитано - то, в вашем случае, прерывать цикл чтения.
Viktory12345
7 / 7 / 1
Регистрация: 11.12.2009
Сообщений: 41
05.11.2010, 20:29  [ТС] #3
Побайтово считывать/записывать нужно потому что "в университете так сказали"(
за gcount() спасибо большое. Однако последний байт все равно два раза считывается. Организовывала цикл do while.
C++
1
2
3
4
5
6
7
8
    do
    {
        in.read((char*)&ch,sizeof(__int8));
        cout<<hex<<int(ch)<<endl;
        i++;
 
           getch();
    }  while(in.gcount()!=0);
С проблемой вывода лишних букв F разобралась. Происходило это потому, что я использовала знаковые, а не беззнаковые переменные.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2010, 20:29
Привет! Вот еще темы с ответами:

[Файлы] Запись-чтение-запись. Почему не прокатывает? - C++
Сначала записываю в файл &quot;а&quot; запись &quot;makulatura&quot;, потом читаю ее в строку h. Все ок. Но потом когда открываю файл &quot;a&quot; опять для записи с...

Файлы (чтение/запись) - C++
Привет всем. Уважаемые программисты! Второй день мучаюсь.. помогите плиз.. Забираю из текстового файла информацию и передаю её в...

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

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


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

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

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