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

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

Восстановить пароль Регистрация
 
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 14:10     Зачем открывать файл как бинарный? #1
Здравствуйте! Зачем открывать файл как бинарный? Ведь от того, что мы скажем, что он бинарный, работа с ним никак не изменится!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gorin
 Аватар для gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
18.06.2012, 14:15     Зачем открывать файл как бинарный? #2
Hagrael, к чему такой вопрос?
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 14:23  [ТС]     Зачем открывать файл как бинарный? #3
gorin, допустим, мне надо что-то записывать и считывать из бинарного файла. Но если нету разницы, говорить, что он бинарный или нет, то зачем вообще добавлять такую возможность?
gorin
 Аватар для gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
18.06.2012, 14:27     Зачем открывать файл как бинарный? #4
Hagrael, бинарный файл - это закодировавный файл, очень удобный для хранения информации, и не кто другой не не сможет его прочесть!!!
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 15:29  [ТС]     Зачем открывать файл как бинарный? #6
ForEveR, да, именно это я и имел в виду. Так зачем же указывать, что файл является бинарным?
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
18.06.2012, 15:54     Зачем открывать файл как бинарный? #7
Ну например сильно умный iostream умеет неявно заменять \n на \t\n для виндов, в бинарном режиме он таким заниматься не будет.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
18.06.2012, 18:42     Зачем открывать файл как бинарный? #8
NoMasters, поправочка: \r\n
Hagrael
БТР - мой друг
 Аватар для 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".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2012, 09:00     Зачем открывать файл как бинарный?
Еще ссылки по теме:

C++ Что такое h -файл и obj-файл?Зачем они нужны?
Как сохранить\прочитать контейнер в бинарный файл C++
Как зашифровать бинарный файл XOR? C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
20.06.2012, 09:00     Зачем открывать файл как бинарный? #10
10 это как-раз '\n'. Так что, похоже как-раз при записи перед ним автоматом вставляется '\r' (13), а при чтении автоматически пропускается. В hex-редакторе файл полученный посмотри.
Yandex
Объявления
20.06.2012, 09:00     Зачем открывать файл как бинарный?
Ответ Создать тему
Опции темы

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