Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Hagrael
БТР - мой друг
331 / 275 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
1

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

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

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

Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл
Бинарные файлы!! Помогите пожалуйста. Дано бинарный файл ( данные сначала в текстовом, конвертирую...

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student {...

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

Как создать обычный файл exe, который могут открывать друзья.
Всем доброе утро! Вопрос о том как сделать программу, которая запускалась бы одним файлом .exe....

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

9
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
18.06.2012, 14:15 2
Hagrael, к чему такой вопрос?
0
Hagrael
БТР - мой друг
331 / 275 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 14:23  [ТС] 3
gorin, допустим, мне надо что-то записывать и считывать из бинарного файла. Но если нету разницы, говорить, что он бинарный или нет, то зачем вообще добавлять такую возможность?
0
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
18.06.2012, 14:27 4
Hagrael, бинарный файл - это закодировавный файл, очень удобный для хранения информации, и не кто другой не не сможет его прочесть!!!
0
18.06.2012, 14:27
ForEveR
В астрале
Эксперт С++
8013 / 4770 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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
1
Hagrael
БТР - мой друг
331 / 275 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
18.06.2012, 15:29  [ТС] 6
ForEveR, да, именно это я и имел в виду. Так зачем же указывать, что файл является бинарным?
0
NoMasters
Псевдослучайный
1931 / 1132 / 96
Регистрация: 13.09.2011
Сообщений: 3,202
18.06.2012, 15:54 7
Ну например сильно умный iostream умеет неявно заменять \n на \t\n для виндов, в бинарном режиме он таким заниматься не будет.
2
gooseim
Эксперт С++
513 / 417 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
18.06.2012, 18:42 8
NoMasters, поправочка: \r\n
1
Hagrael
БТР - мой друг
331 / 275 / 47
Регистрация: 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".
0
grizlik78
Эксперт С++
2115 / 1555 / 230
Регистрация: 29.05.2011
Сообщений: 3,233
20.06.2012, 09:00 10
10 это как-раз '\n'. Так что, похоже как-раз при записи перед ним автоматом вставляется '\r' (13), а при чтении автоматически пропускается. В hex-редакторе файл полученный посмотри.
0
20.06.2012, 09:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2012, 09:00

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

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

Бинарный файл внутри получился как обычный
Вывожу двумерный массив в бинарный файл: ofstream binfile(&quot;D:/text.txt&quot;, ios::binary); for...


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

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

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