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

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

Войти
Регистрация
Восстановить пароль
 
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
#1

Зачем открывать файл как бинарный? - C++

18.06.2012, 14:10. Просмотров 825. Ответов 9
Метки нет (Все метки)

Здравствуйте! Зачем открывать файл как бинарный? Ведь от того, что мы скажем, что он бинарный, работа с ним никак не изменится!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 14:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зачем открывать файл как бинарный? (C++):

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод) - C++
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student { string firstname,lastname, group; ...

Как правильно открывать файл и записывать/читать из него - C++
Как правильно открывать файл и записывать/читать из него? На разных сайтах и учебниках есть различные примеры етого но везде разные ...

Как создать обычный файл exe, который могут открывать друзья. - C++
Всем доброе утро! Вопрос о том как сделать программу, которая запускалась бы одним файлом .exe. Создал программу (ну самую простейшую)....

Как зашифровать бинарный файл XOR? - C++
Напишите пожалуйста пример что-то вроде void crypt(char key,String filein,String fileout,char key) { } срочно нужно

Бинарный файл, как сконвертировать в текстовый - C++
Здравствуйте, кто работал с бинарными файлами , не nодскажете какой нибудь гайд nо работе с ними или как можно конвертировать их в...

Бинарный файл внутри получился как обычный - C++
Вывожу двумерный массив в бинарный файл: ofstream binfile("D:/text.txt", ios::binary); for (int i = 0; i < Nr; i++) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
18.06.2012, 14:15 #2
Hagrael, к чему такой вопрос?
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 14:23  [ТС] #3
gorin, допустим, мне надо что-то записывать и считывать из бинарного файла. Но если нету разницы, говорить, что он бинарный или нет, то зачем вообще добавлять такую возможность?
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
18.06.2012, 14:27 #4
Hagrael, бинарный файл - это закодировавный файл, очень удобный для хранения информации, и не кто другой не не сможет его прочесть!!!
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.06.2012, 14:30 #5
gorin, Я дико подозреваю, что имеется ввиду, что без разницы указывать-ли в режиме открытия файла является-ли он бинарным. Пруф.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream>
#include <iostream>
 
int main()
{
   const int value = 5;
   std::ofstream ofs("test_f");
   ofs.write(reinterpret_cast<char*>(const_cast<int*>(&value)), sizeof(value));
   ofs.close();
   std::ifstream ifs("test_f");
   int val = 0;
   ifs.read(reinterpret_cast<char*>(&val), sizeof(value));
   std::cout << val << std::endl;
}
Bash
1
2
forever@pterois:~/My_pro1/cpp_pro$ ./new 
5
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 15:29  [ТС] #6
ForEveR, да, именно это я и имел в виду. Так зачем же указывать, что файл является бинарным?
NoMasters
Псевдослучайный
1753 / 1096 / 72
Регистрация: 13.09.2011
Сообщений: 3,127
18.06.2012, 15:54 #7
Ну например сильно умный iostream умеет неявно заменять \n на \t\n для виндов, в бинарном режиме он таким заниматься не будет.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
18.06.2012, 18:42 #8
NoMasters, поправочка: \r\n
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
20.06.2012, 08:24  [ТС] #9
Понятно.

Добавлено через 18 часов 13 минут
Но вот что интересно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fstream file("text.txt", ios::trunc | ios::in | ios::out);
 
int n = 5;
cout << file.tellp() << " "; // 0
file.write(reinterpret_cast<char*>(&n), sizeof(int));
n = 10;
cout << file.tellp() << " "; // 4
file.write(reinterpret_cast<char*>(&n), sizeof(int));
cout << file.tellp() << " " << endl; // 9
int nRead[2];
file.seekg(0);
cout << file.tellg() << " "; // 0
file.read(reinterpret_cast<char*>(nRead), sizeof(int));
cout << file.tellg() << " "; // 5
file.read(reinterpret_cast<char*>(nRead+1), sizeof(int));
cout << file.tellg() << " " << endl; // 9
cout << nRead[0] << " " << nRead[1] << endl; // 5 10
file.close();
Почему когда мы записываем информацию, указатель перемещается вначале на 4, а потом на 9, а когда считываем, то вначале на 5, а затем на 9? По-моему, он всегда должен перемещаться на 4 :scracth:

Добавлено через 1 минуту
Причем, когда открываю файл, как бинарный, то все отлично: цифры выводятся такие: "0 4 8".
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
20.06.2012, 09:00 #10
10 это как-раз '\n'. Так что, похоже как-раз при записи перед ним автоматом вставляется '\r' (13), а при чтении автоматически пропускается. В hex-редакторе файл полученный посмотри.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2012, 09:00
Привет! Вот еще темы с ответами:

Как сохранить\прочитать контейнер в бинарный файл - C++
ostream_iterator&lt;string, char&gt; out(cout, &quot;\n&quot;); set&lt;string&gt; mat; set&lt;string&gt; pat; string temp; cout &lt;&lt; &quot;Input Mat's...

Как открыть бинарный файл, не зная его структуру? - C++
Можно ли как-нибудь открыть бинарный файл, не зная его структуру?

Как класс string записать в бинарный файл через вектор? - C++
вопрос такой у меня есть класс. я создаю вектор по этому классу vector&lt;Employee&gt; work; вектор отлично заполняется и вся программа...

Как записать в бинарный файл структуры записи из текстового файла? - C++
Здравствуйте! Прошу помочь с чтением из текстового файла а затем запись всего что записано в структуру в бинарный файл. Есть текстовый...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.06.2012, 09:00
Ответ Создать тему
Опции темы

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