Binary 101: Как создать бинарный файл из простого текста
Бинарный файл состоит из последовательности бит, которые используются для хранения информации в компьютере. Он может содержать изображения, видео, звук, программы и другие файлы. В этой статье мы рассмотрим, как создать бинарный файл из простого текста.
Шаг 1: Создание файла с текстом
Первым шагом является создание файла с текстом в любом текстовом редакторе. Файл может содержать любой текст, например:
Шаг 2: Определение структуры файла
Бинарный файл должен иметь определенную структуру, которую компьютер будет понимать. В нашем случае, мы будем использовать структуру, состоящую из заголовка и данных.
Заголовок будет содержать информацию о файле, такую как его размер и тип данных. Данные будут содержать сам текст.
Шаг 3: Кодирование данных
Для того, чтобы данные могли быть записаны в бинарный файл, они должны быть закодированы в бинарный формат. В нашем случае, мы будем использовать ASCII-кодировку, которая представляет каждый символ одним байтом.
Шаг 4: Создание бинарного файла
Для создания бинарного файла мы будем использовать любой программный язык, который поддерживает запись в бинарном формате. Например, на языке Python мы можем выполнить следующий код:
Первые две строки открывают файл с текстом для чтения, читают его содержимое и кодируют его в бинарный формат. Затем мы создаем бинарный файл и записываем заголовок и данные.
Шаг 5: Чтение бинарного файла
Для того, чтобы прочитать бинарный файл, нам нужно выполнить следующий код:
Мы открываем бинарный файл для чтения, читаем заголовок и данные, а затем декодируем данные в текст и выводим его.
Заключение
Создание бинарных файлов из простого текста может показаться сложным на первый взгляд, но на самом деле это довольно просто. Следуя этим шагам, вы сможете создавать свои собственные бинарные файлы, которые могут содержать любую информацию, которую вы захотите.
Основы программирования на MQL5: Файлы
Функции для работы с файлами есть почти во всех языках программирования, и MQL5 в этом смысле — не исключение. Хотя при программировании советников и индикаторов на MQL5 работать с использованием файлов приходится не всегда, (а скорее даже — очень редко), но тем не менее, каждый экспертописатель рано или поздно с этим сталкивается. Диапазон задач, для которых может потребоваться работа с файлами, достаточно широк. Это может быть генерация собственного отчета о торговле, создание специальных файлов с какими-либо сложными параметрами для советника или индикатора, чтение рыночных данных (например, календаря новостей) и т.п. В данной статье будут рассмотрены все функции по работе с файлами в MQL5. Для каждой из них будут предложены несложные практические задания, выполняя которые, вы приобретете полезные навыки по работе с файлами. Кроме учебных примеров, в ходе статьи будут созданы несколько полезных функций, которые смогут пригодиться в практической деятельности.
В документации по MQL5 описание файловых функций расположено по следующей ссылке.
Чтение текстового файла
Самое простая и наиболее часто используемая функция — чтение текстовых файлов. Не будем сильно затягивать с теорией, постараемся поскорее приступить к практике. Поскольку данная статья посвящена программированию, у вас уже должен быть открыт редактор MetaEditor. Если вы этого еще не сделали — откройте его. В редакторе выполните команду: Главное меню — Открыть каталог данных. В открывшейся папке вы увидите папку MQL5. Откройте ее, затем — расположенную в ней папку Files. Именно в ней и должны располагаться файлы, которые можно обрабатывать файловыми функциями MQL5. Это ограничение предназначено для обеспечения информационной безопасности. Пользователи терминала MetaTrader активно обмениваются между собой программами, написанными на MQL5. Если бы этого ограничения не было, то недоброжелателям было бы очень легко нанести вред вашему компьютеру: удалить или испортить важные файлы или похитить персональные данные.
В только что открытой папке MQL5/Files создадим текстовый файл. Для этого щелкните мышкой где-нибудь в свободном месте папки, и в открывшемся контекстном меню выберите команду: Создать — Текстовый документ. При создании файла дайте ему имя «test», полное имя файла должно быть «test.txt». Будет значительно удобнее, если вы включите на вашем компьютере режим отображения расширения файлов.
После переименовывания файла щелкните на нем, чтобы открыть его: он откроется в редакторе «Блокнот». Запишите в файл 2 — 3 строки текста и сохраните его. При сохранении файла убедитесь, что выбрана кодировка ANSI (выпадающий список в нижней части окна сохранения файла, рис. 1).
Рис. 1. Сохранение текстового файла из «Блокнота» Windows. Красной стрелкой показан выбор кодировки файла
Теперь мы будем читать этот файл средствами MQL5. В редакторе MetaEditor создадим скрипт, назовем его «sTestFileRead».
Прежде чем читать файл или писать в него, его необходимо открыть, а по завершению работы — закрыть. Открытие файла выполняется функцией FileOpen(), у которой есть два обязательных параметра. Первым параметром указывается имя файла. Укажем имя ранее созданного файла «test.txt». Заметьте: указывается не полный путь к файлу, а только путь от папки MQL5/Files. Вторым параметром указывается комбинация флагов, определяющая режим работы с файлами. Мы собираемся читать файл, значит укажем флаг FILE_READ. Файл «test.txt» является текстовым в кодировке ANSI, значит, укажем еще два флага: FILE_TXT и FILE_ANSI. Флаги комбинируются через выполнение логической операции «или», обозначаемой знаком «|».
Функция FileOpen() возвращает хэндл файла. Не будем вдаваться в подробности, что такое хэндл. Скажем просто, что это некоторое числовое значение (тип int), которое в дальнейшем используется вместо строкового имени файла. Строковое имя файла указывается только при открытии файла, а затем, при выполнении каких-либо действий с этим файлом, используется его хэндл.
Значит, открываем файл (пишем код в функции OnStart() скрипта «sTestFileRead»):
После открытия файла обязательно необходимо выполнить проверку, действительно ли файл открылся. Это выполняется с помощью проверки значения полученного хэндла:
Ошибка при открытии файла — это частое и обычное явление. Если файл уже открыт, то открыть его второй раз нельзя. Файл может быть открыт и в какой-либо сторонней программе. Например, при открытии файла в «Блокноте» Windows этот же файл можно открыть из MQL5. Но если же открыть его в Microsoft Excel, то одновременно открыть его не удастся больше ниоткуда.
Чтение данных из текстового файла (открытого с флагом FILE_TXT) выполняется функцией FileReadString(). Чтение выполняется построчно, один вызов функции читает одну строку файла. Прочитаем одну строку и выведем ее в окно сообщений:
Обратите внимание, вызов функций FileReadString() и FileClose() выполняется с указанием хэндла (переменная h), полученного при открытии файла функцией FileOpen().
Теперь можно выполнить скрипт «sTestFileRead». Если что-то не будет получаться, сравните свой код с файлом «sTestFileRead» из приложения к статье. В результате работы скрипта должно открыться окно с первой строкой из файла «test.txt» (рис. 2).
Рис. 2. Результат работы скрипта «sTestFileRead»
Итак, пока мы прочитали только одну строку файла «test.txt». Чтобы прочесть остальные две, можно вызвать функцию FileReadString() еще два раза, но на практике количество строк файла может быть неизвестно заранее. Для решения этой задачи пригодится функция FileIsEnding() и оператор цикла while. Если по мере чтения файла мы доходим до его конца, функция FileIsEnding() возвращает true. С использованием этой функции напишем свою функцию для чтения всех строк файла и вывода их в окно сообщений. Она может пригодится для различных учебных экспериментов по работе с файлами. Получаем следующую функцию:
Создадим скрипт «sTestFileReadToAlert», скопируем в него эту функцию и вызовем ее из функции OnStart() скрипта:
В результате работы скрипта откроется окно сообщений со строкой «=== Начало ===» и всеми тремя строками файла «test.txt». Теперь файл прочитан полностью (рис. 3).
Рис. 3. Благодаря функции FileIsEnding() и цикла do while файл прочитан полностью
Создание текстового файла
Для создания файла его необходимо открыть функцией FileOpen(). Откроем файл с именем «test.txt», но вместо флага FILE_READ нужно указать флаг FILE_WRITE:
После открытия не забудьте проверить хэндл, как мы уже делали при чтении файла. Если функция выполнена успешно, будет создан новый файл «test.txt». Если же файл уже существовал, он будет полностью очищен. Будьте внимательны и аккуратны при открытии файлов для записи, не потеряйте ценные данные.
Запись в текстовый файл выполняется функцией FileWrite(), первым параметром функции указывается хэндл файла, а вторым — записываемая в файл строка. При каждом вызове функции FileWrite() выполняется запись новой строки.
Запишем в файл в цикле десять строк. Окончательно получим следующий код скрипта (в приложении скрипт «sTestFileCreate»):
После выполнения этого кода в файле «test.txt» будет находиться десять строк. Для проверки содержимого файла его можно открыть в «Блокноте» или выполнить скрипт «sTestFileReadToAlert».
Обратите внимание на функцию FileWrite(). У нее может быть не только два аргумента, но и значительно больше. В функцию можно передать несколько строковых переменных, и при записи они будут объединены в одну строку. В только что приведенном коде вызов функции FileWrite() можно записать следующим образом:
Функция сама объединит строки при записи.
Запись в конец текстового файла
Иногда бывает необходимо сохранить содержимое существующего файла и дописать в его конец еще одну или несколько строк текста. Для выполнения таких действий файл нужно открыть одновременно для записи и для чтения. То есть, при вызове функции FileOpen() необходимо указать оба флага: FILE_READ И FILE_WRITE.
Если файл с указанным именем не существует, он будет создан. Если же он уже есть, то будет открыт, и при этом все его содержимое сохранится. Однако если при этом сразу начать писать в файл, его старое содержимое будет стерто, поскольку запись будет выполняться с начала файла.
При работе с файлами существует такое понятие, как «указатель» — это числовое значение, определяющее в файле позицию, с которой будут выполняться следующая запись или чтение из файла. При открытии файла указатель автоматически устанавливается в начало файла, а по мере чтения или записи данных он автоматически перемещается на величину считанных или записанных данных. При необходимости можно произвольно перемещать указатель. Для этого применяется функция FileSeek().
Чтобы сохранить старое содержимое и добавить новое в конец файла, прежде чем выполнять запись, необходимо переместить указатель в конец файла:
В функцию FileSeek() передаются три параметра: хэндл, величина смещения указателя и позиция, от которой выполняется отсчет смещения. В данном примере константа SEEK_END означает конец файла. Таким образом выполняется смещение указателя на величину 0 байт от конца файла, то есть, в самый его конец.
Окончательно получаем следующий код скрипта для дополнения файла:
Этот скрипт также есть в приложении к статье, его имя — «sTestFileAddToFile». Попробуйте запустить скрипт, затем проверьте содержимое файла «test.txt». Каждый вызов скрипта «sTestFileAddToFile» будет добавлять по строке к файлу «test.txt».
Изменение заданной строки текстового файла
Несмотря на возможность свободного перемещения указателя по файлу, с текстовыми файлами это может быть использовано только для дополнения файла и совершенно неприменимо для внесения изменений. Невозможно внести изменения в какую-то определенную строку файла. Дело в том, что строки файла — это условное понятие, ведь на самом деле в файле нет никаких строк, а есть один непрерывный ряд данных. В этом ряду иногда встречаются специальные символы, невидимые в текстовом редакторе. Они указывают, что следующие данные надо отображать с новой строки. Если и установить указатель в начало строки и начать выполнять запись, то в случае, когда размер записываемых данных меньше заменяемой строки, в строке останутся старые данные. Если же размер новой строки больше размера старой строки, будут затерты символы перехода на новую строку и часть данных следующей строки.
Поэкспериментируем: попробуем заменить в файле «test.txt» вторую строку. Для этого откроем файл для чтения и записи, считаем одну строку, чтобы переместить указатель на начало второй строки, и попробуем записать новую строку из двух букв «AB» (скрипт «sTestFileChangeLine2-1» в приложении):
В результате работы этого скрипта файл «test.txt» будет выглядеть в «Блокноте» следующим образом (рис. 4):
Рис. 4. Результат попытки изменения одной строки текстового файла
Вместо второй строки появились две новых: «AB» и «ка-2». Можно догадаться, что «ка-2» — это остатки от второй строки, в которой оказались стертыми четыре знака. Дело в том, что при записи строки функцией FileWrite() она добавляет в конец записываемого текста символы перехода на новую строку, а в операционной системе Windows их два. Два знака от строки «AB» и два знака перехода на новую строку в сумме и дают стертые 4 символа.
Восстановим файл «test.txt» выполнив скрипт «sTestFileCreate», и теперь попробуем заменить вторую строку более длинной строкой. Запишем строку «Строка-12345» (скрипт «sTestFileChangeLine2-2» в приложении):
Посмотрим файл (рис. 5):
Рис. 5. Результат второй попытки изменения одной строки текстового файла
Как видим, поскольку новая строка была длиннее старой, то задета и третья строка.
Единственный вариант внесения изменений в текстовые файлы — это их полное считывание и запись заново. Нужно прочитать файл в массив, внести изменения в нужные элементы массива и сохранить его построчно в другой файл, затем удалить старый файл, а новый переименовать. В некоторых случаях можно обойтись и без массива: по мере чтения строк из одного файла записывать их в другой, в определенный момент внести изменения в нужную строку и записать ее, а потом, как и в первом случае, удалить старый файл и переименовать новый.
Попробуем вариант без массива. Для этого сначала потребуется создать временный файл. Напишем функцию получения уникального имени временного файла. В функцию будет передаваться имя файла и его расширение, а в самой функции будет выполняться проверка, существует ли такой файл (стандартной функцией FileIsExists()). Если он существует, то к имени будет добавляться число, пока не окажется, что такого файла нет. Получается следующая функция:
Создадим скрипт «sTestFileChangeLine2-3», скопируем в него эту функцию, а в функции OnStart() будем располагать следующий код.
Откроем файл «test.txt» для чтения:
Получим имя временного файла и откроем его:
Читаем файл построчно и считаем строки. Все прочитанные строки сразу записываются во временный файл, а вторая строка заменяется:
Закрываем оба файла:
Осталось удалить исходный файл и переименовать временный. Для удаления используется стандартная функция FileDelete().
Для переименовывания используем стандартную функцию FileMove(), которая предназначена для перемещения или переименовывания файлов. В функцию передаются четыре обязательных параметра: имя перемещаемого файла (файл-источник), флаг расположения файла, имя нового файла (файл назначения), флаг перезаписи. С именами файлов должно быть все понятно, поэтому подробнее остановимся на втором и четвертом параметрах — флагах. Второй параметр определяет расположение исходного файла. Дело в том, что файлы, с которыми можно работать в MQL5, могут располагаться не только в папке MQL5/Files терминала, но и в общей папке всех терминалов. Позже рассмотрим этот момент подробней, а пока просто ставим 0. Последний параметр определяет расположение файла назначения, и еще может иметь дополнительный флаг, определяющий действия в случае, если файл назначения существует. Поскольку мы удалили исходный файл самостоятельно (файл назначения), четвертым параметром указываем 0:
Прежде чем выполнять скрипт «sTestFileChangeLine2-3», восстановите файл «test.txt» скриптом «sTestFileCreate». После работы скрипта «sTestFileChangeLine2-3» файл «text.txt» должен иметь следующее содержимое (рис. 6):
Рис. 6. Содержимое файла после замены строки
Вернемся к функции FileMove(). Если четвертым параметром указать флаг FILE_REWRITE, позволяющий перезаписывать файл назначения:
то в этом случае из скрипта можно не удалять исходный файл. Этот вариант используется в скрипте «sTestFileChangeLine2-3» из приложения к статье.
Вместо функции FileMove() можно использовать другую стандартную функцию FileCopy(), но тогда придется удалять временный файл:
Чтение текстового файла в массив
Одна полезная функция уже была написана в этой статье (получение свободного имени файла). Теперь напишем еще одну функцию, очень часто используемую при работе с файлами — чтение файла в массив. В функцию передается имя файла и строковый массив, массив передается по ссылке, а в функции заполняется содержимым файла. Функция возвращает true/false в зависимости от успешности ее работы.
Подробно эту функцию рассматривать мы не будем: на данный момент, после уже изученного в этой статье материала, она должна быть понятна. К тому же она подробно прокомментирована, остановимся только на некоторых деталях. После чтения строки из файла в переменную str выполняется обрезание пробелов по краям строки функциями StringTrimLeft() и StringTrimRight(). Затем выполняется проверка, не пустая ли строка str. Это сделано для того, чтобы пропустить ненужные пустые строки. По мере заполнения массива он увеличивается не по одному элементу, а блоками по 1024, так функция будет работать значительно быстрее. В конце выполняется масштабирование массива в соответствии с фактически считанным количеством строк.
В приложении эта функция находится в скрипте «sTestFileReadFileToArray».
Создание текстового файла с разделителями
До сих пор в этой статье нам приходилось иметь дело только с простыми текстовыми файлами. Существует еще одна разновидность текстовых файлов: текстовые файлы с разделителями. Обычно они имеют расширение csv (сокращение от анг. «comma ceparated values», переводимое как «значения, разделенные запятой»). По сути, это обычные текстовые файлы, которые можно открывать в текстовых редакторах, читать и редактировать вручную. Один из знаков (не обязательно это будет запятая) является разделителем полей в строках. В связи с этим, с такими файлами можно выполнять несколько иные действия, нежели с простыми текстовыми файлами. Основное отличие заключается в том, что если в простом текстовом файле при вызове функции FileRedaString() происходит считывание целой строки, в файлах с разделителем происходит считывание до разделителя или до конца строки. Есть также отличие и в работе функции FileWrite(): все перечисляемые в функции записываемые переменные не просто соединяются в одну строку, а между ними добавляется разделитель.
Поэкспериментируем с созданием csv-файла. Для создания открываем файл так же, как уже открывали текстовый файл на запись, но только вместо флага FILE_TXT указываем флаг FILE_CSV. Третьим параметром указывается символ, используемый в качестве разделителя:
Запишем в файл десять строк по три поля:
В конце не забываем закрывать файл. В приложении код этого примера находится в скрипте «sTestFileCreateCSV». В результате работы этого примера создается файл «test.csv». Содержимое файла показано на рис. 7. Как видим, параметры функции FileWrite() не просто соединились в одну строку, а между ними добавлен разделитель.
Рис. 7. Содержимое файла с разделителями
Чтение текстового файла с разделителями
Попробуем прочитать файл csv точно так же, как читали текстовый файл в самом начале этой статьи. Сделаем копию скрипта «sTestFileReadToAlert» с именем «sTestFileReadToAlertCSV». В функции ReadFileToAlert() изменим первую строку:
Функцию ReadFileToAlert() переименуем в ReadFileToAlertCSV() и изменим имя файла, передаваемого в функцию:
По результату работы скрипта будет видно, что файл прочитан по одному полю. Хотелось бы определить, когда прочитаны поля одной строки и начинается новая строка. Для этого будет полезна функция FileIsLineEnding().
Сделаем копию скрипта «sTestFileReadToAlertCSV» с именем «sTestFileReadToAlertCSV2», переименуем функцию «ReadFileToAlertCSV» в «ReadFileToAlertCSV2» и внесем в нее изменения. Добавим функцию FileIsLineEnding(): если она возвращает true, будем выводить разделительную строку «—«.
Теперь поля, выводимые скриптом в окно сообщений, будут разделяться на группы (рис. 8).
Рис. 8. Разделители «—» между группами полей одной строки файла
Чтение файла с разделителями в массив
Разобравшись в особенностях работы с csv-файлами, напишем еще одну практически полезную функцию для чтения csv-файла в массив. Чтение будет выполняться в массив структур, где каждый элемент будет соответствовать одной строке файла. В структуре будет находиться строковый массив, каждый элемент которого будет соответствовать одному полю строки.
Подробно разбирать эту функцию не будем, остановимся только на основных принципиальных моментах. В начале цикла while(!FileIsEnding(h)) выполняется чтение одного поля. Здесь становится известно, что в массив структур добавляется элемент. Проверяем размер массива, и, если надо, увеличиваем его размер на 1024 элемента. Сразу же изменяем размер массива для полей. Ему сразу задается размер в 64 элемента, и элементу с индексом 0 присваивается значение прочитанного из файла первого поля строки. После этого в цикле while(!FileIsLineEnding(h)) прочитываем все остальные поля. Прочитав очередное поле, проверяем размер массива, и если надо, то увеличиваем его, затем отправляем прочитанное из файла строку в массив. Дочитав строку до конца (выйдя из цикла while(!FileIsLineEnding(h)) ), изменяем размер массива полей в соответствии с фактическим количеством полей. В самом конце изменяем размер массива строк в соответствии с фактическим количеством прочитанных строк.
В приложении данная функция находится в скрипте «sTestFileReadFileToArrayCSV». Скрипт читает файл «test.csv» в массив и выводит этот массив в окно сообщений. Результат точно такой же, как на рис. 8.
Запись массива в текстовый файл с разделителями
Если количество полей в строке известно заранее, это несложно. Такая задача уже решалась в этой статье в разделе «Создание текстового файла с разделителями». Для случая, когда количество полей неизвестно, можно самостоятельно в цикле собрать все поля в одну строку через разделитель и записать ее в файл, открытый с флагом FILE_TXT.
Собираем все поля (элементы массива) в одну строку через разделитель. В конце строки разделителя не должно быть, иначе в строке будет лишнее пустое поле:
Записываем строку в файл и закрываем его:
Это пример находится в приложении в скрипте «sTestFileWriteArrayToFileCSV».
Файлы UNICODE
До сих пор при открытии файлов во всех случаях указывался флаг FILE_ANSI, определяющий их кодировку. В этой кодировке одному символу соответствует один байт, а следовательно, весь набор ограничен количеством 256 символов. В настоящее время широко используется кодировка UNICODE, в которой один символ определяется несколькими байтами и текстовый файл может содержать очень большое количество символов: от алфавитов разных языков до иероглифов и прочих графических символов.
Немного поэкспериментируем. Откройте в редакторе скрипт «sTestFileReadToAlert», сохраните его с именем «sTestFileReadToAlertUTF» и измените флаг FILE_ANSI на FILE_UNICODE:
Поскольку файл «test.txt» сохранен в кодировке ANSI, в результате работы скрипта откроется окно со странным набором символов (рис. 9).
Рис. 9. Странный текст при несовпадении кодировки файла и кодировки указанной при открытии файла
Очевидно, это происходит от несовпадения кодировки файла и кодировки, указанной при открытии файла.
Откройте в редакторе скрипт «sTestFileCreate» сохраните его с именем «sTestFileCreateUTF» и измените флаг FILE_ANSI на FILE_UNICODE:
Запустите скрипт «sTestFileCreateUTF», чтобы создать новый файл «test.txt». Теперь скрипт «sTestFileReadToAlertUTF» выведет читаемый текст (рис. 10).
Рис. 10. Чтение скриптом «sTestFileReadToAlertUTF» файла, созданного скриптом «sTestFileCreateUTF»
Откройте файл «test.txt» в редакторе «Блокнот» и выполните команду главного меню «Сохранить как». В нижней части окна сохранения файла можно увидеть, что в списке «Кодировка» выбрано «Unicode». «Блокнот» каким-то образом определил кодировку файла. Файлы в кодировке Unicode начинаются со стандартного набора символов, так называемого BOM (byte order mark, отметка о последовательности байтов). Чуть позже, при изучении бинарных файлов, мы еще вернемся к этому вопросу и напишем функцию для определения типа текстового файла (ANSI или UNCODE).
Дополнительные функции для работы с текстовыми файлами с разделителями
Из всего обилия файловых функций для работы с содержимым текстовых файлов (как простых, так и с разделителями) практически можно ограничиться только двумя функциями: FileWrite() и FileReadString(). Функция FileReadString(), кроме того, используется и при работе с бинарными файлами (о бинарных файлах поговорим чуть ниже). Кроме функции FileWrite(), можно использовать функцию FileWriteString(), но это не принципиальный вопрос.
При работе с текстовыми файлами с разделителем могут использоваться еще несколько функций, которые могут сделать работу более удобной: FileReadBool(), FileReadNumber() и FileReadDatetime(). Функция FileReadNumber() предназначена для чтения чисел. Если заранее известно, что читаемое из файла поле включает в себя только число, можно применить эту функцию. Ее действие идентично чтению строки функцией FileReadString() и преобразованию ее в число функцией StringToDouble(). Аналогично, функция FileReadBool() предназначена для чтения значений типа bool, в строке может быть записан текст «true» или «false» или числа «0» или «1». Функция FileReadDatetime() предназначена для чтения даты в строковом формате и преобразования ее в числовое значение типа datetime. Ее действие аналогично чтению строки и преобразованию ее функцией StringToTime().
Бинарные файлы
Рассмотренные ранее текстовые файлы очень удобны тем, что их содержимое, читаемое программными методами, соответствует тому, что вы видите в файле, открыв его в текстовом редакторе. Можно легко проконтролировать результаты работы программы, посмотрев файл в редакторе, а при необходимости файл можно изменить вручную. Недостаток текстовых файлов — ограниченные возможности при работе с ними (вспомните, с какими сложностями пришлось столкнуться при замене одной строки файла).
Если текстовые файлы имеют незначительный размер, использовать их очень удобно, но при больших размерах работа с ними становится очень медленной. Если необходимо работать с большими объемами данных и делать это максимально быстро, необходимо использовать бинарные файлы.
При открытии файла в бинарном режиме вместо флага FILE_TXT или FILE_CSV указывается флаг FILE_BIN. Указывать флаги кодировки FILE_ANSI или FILE_UNCODE нет смысла, ведь бинарный файл — это файл с цифрами.
Конечно, из любопытства можно взглянуть на содержимое бинарного файла в текстовом редакторе типа «Блокнота»: можно увидеть буквы и даже читаемый текст, если он имеется в файле, но это больше связано с особенностями работы «Блокнота», нежели с содержимым файла.
Посмотреть на бинарный файл в текстовом редакторе еще можно, но редактировать его там определенно не следует, потому что в итоге файл окажется поврежденным. Не будем вдаваться в подробности, почему так происходит, просто примем это как факт. Конечно, существуют и специальные редакторы для бинарных файлов, позволяющие выполнять их редактирование, но все равно процесс этот не будет наглядным и интуитивно понятным.
Бинарные файлы, переменные
Наибольшее количество функций для работы с файлами в MQL5 предназначены для применения в бинарном режиме. Есть функции для записи/чтения переменных различных типов:
Все функции записи/чтения переменных рассматривать мы не будем: достаточно одной, ведь использование остальных функций абсолютно идентично. Поэкспериментируем с функциями FileWriteDouble() и FileReadDouble().
Сначала создадим файл и запишем в него три переменных, затем будем читать их в произвольном порядке.
Пишем в файл три переменные double со значениями 1.2, 3.45, 6.789:
Не забудьте закрыть файл.
В приложении скрипт с этим кодом имеет имя «sTestFileCreateBin». В результате работы скрипта в папке MQL5/Files появится файл «test.bin». Все-таки взглянем на содержимое файла в «Блокноте» (рис. 11). Для этого откройте «Блокнот» и перетащите на него файл:
Рис. 11. Бинарный файл в «Блокноте»
Как видим, нет смысла смотреть такие файлы в блокноте.
Теперь прочитаем файл. Очевидно, для чтения должна использоваться функция FileReadDouble(). Откроем файл:
Объявим три переменные, прочитаем в них значения из файла и выведем их в окно сообщений:
Не забывайте закрыть файл. В приложении скрипт с этим кодом имеет имя «sTestFileReadBin». В результате работы скрипта получим сообщение: 1.20000000 3.45000000 6.78900000.
В бинарные файлы, зная их структуру, можно вносить ограниченные изменения. Попробуем изменить значение второй переменной, не перезаписывая весь файл.
После открытия нужно переместить указатель на нужную позицию. Для вычисления позиции удобно пользоваться функцией sizeof(). Она возвращает размер указанного типа данных. Полезно также будет ознакомиться с типами данных и их размерами. Перемещаем указатель на начало второй переменной:
Для наглядности записано умножение sizeof(double)*1, чтобы было понятно, что подразумевается окончание первой переменной. Если бы надо было изменить третью переменную, то нужно было бы выполнить умножение на 2.
Записываем новое значение:
В приложении этот код находится в скрипте с именем «sTestFileChangeBin». После выполнения этого скрипта выполняем скрипт «sTestFileReadBin» и получаем: 1.20000000 12345.67890000 6.78900000.
Таким же образом можно читать и не весь файл, а только заданную переменную. Напишем код для чтения третей переменной double из файла «test.bin».
Переместим указатель, прочитаем значение и выведем его в окно:
Скрипт с этим примером находится в приложении, имя файла — «sTestFileReadBin2». В результате работы скрипта получим: 6.78900000 — значение третьей переменной. Самостоятельно измените этот код так, чтобы прочитать вторую переменную.
Точно таким же образом можно сохранить и читать переменные других типов, их комбинации. Важно знать структуру файла, чтобы правильно вычислять позицию для установки указателя.
Бинарные файлы, структуры
Если в файл нужно писать несколько переменных разного типа, будет намного удобней писать/читать переменные не по одной, а описать структуру и читать/писать целую структуру. Обычно так и делается: файл начинается со структуры, описывающей расположение данных в файле (формат файла), а затем располагаются данные. Однако имеется ограничение: в структуре не должно быть динамических массивов и строк, потому что их размер неизвестен.
Поэкспериментируем с записью и чтением структуры в файл. Опишем структуру с несколькими переменными разного типа:
В приложении этот код располагается в скрипте с именем «sTestFileWriteStructBin». В функции OnStart() объявим две переменные и заполним их разными значениями:
Теперь, как обычно, откроем файл:
Запишем в него обе структуры:
Не забудьте закрыть файл. Исполните этот скрипт, чтобы создался файл.
Теперь будем читать файл. Прочитаем вторую структуру.
Переместим указатель на начало второй структуры:
Объявим переменную (добавьте в начало файла описание структуры STest), прочитаем в нее данные из файла:
Выведем значения полей структуры в окно:
В результате работы в окне сообщений увидим строку: 11 22 33 6789 false 56.78. Строка соответствует данным второй структуры.
Код этого примера расположен в приложении в скрипте с именем «sTestFileReadStructBin».
Чтение структур по переменным
В MQL5 поля структур следуют одно за другим, без смещения (выравнивания), поэтому можно без каких-либо сложностей читать отдельные поля структур.
Прочитаем значение переменной double из второй структуры в файле «test.bin». Важно правильно рассчитать позицию для установки указателя:
Все остальное аналогично тому, что мы уже много раз делали в этой статье: открыть файл, прочитать, закрыть. Код этого примера находится в приложении в скрипте с именем «sTestFileReadStructBin2».
Определение файла UNICODE, функция FileReadInteger
Немного разобравшись с бинарными файлами, можно создать полезную функцию для определения файла UNICODE. Эти файлы можно отличить по значению начального байта, равному 255. Коду 255 соответствует непечатный символ, поэтому в нормальном ANSI файле его не может быть.
Значит, необходимо прочитать из файла один байт и проверить его значение. Для чтения различных целочисленных переменных, кроме long, используется функция FileReadInteger(). В нее передается параметр, указывающий размер читаемой переменной. Читаем из файла один байт в переменную v:
Остается только проверить значение переменой. Ниже приведен полный код функции:
Функция возвращает true/false, в зависимости от того, удалось ли выполнить проверку. Первым параметром в функцию передается имя файла, а вторым по ссылке переменная, в которой после выполнения функции будет значение true для файлов UNICODE и false для файлов ANSI.
Код этой функции с примером ее вызова находится в приложении в скрипте «sTestFileCheckUnicode». Запустите скрипт «sTestFileCreate» и проверьте его тип скриптом «sTestFileCheckUnicode», затем запустите скрипт «sTestFileCreateUTF» и еще раз запустите скрипт «sTestFileCheckUnicode». Вы получите другой результат.
Бинарные файлы, массивы, массивы структур
Основное преимущество бинарных файлов становится заметным при работе со значительными размерами данных. Данные при этом обычно располагаются в массивах (отдельными переменными сложно получить значительный размер) и в строках. Массивы могут быть не только из переменных стандартного типа, но и из структур, которые должны соответствовать уже описанным ранее требованиям. В них не должно быть динамических массивов и строк.
Массивы записываются в файл функцией FileWriteArray(). Первым параметром в функцию, как обычно, передается хэндл файла, затем имя массива. Два последующих параметра необязательны. Если нужно сохранить не весь массив, можно указать индекс начального элемента массива и количество сохраняемых элементов.
Чтение массивов выполняется функцией FileReadArray(), параметры функции идентичны параметрам функции FileWriteArray().
Поэкспериментируем, запишем в файл массив int из трех элементов:
В приложении этот код расположен в файле «sTestFileWriteArray».
Теперь прочитаем его (в приложении скрипт «sTestFileReadArray») и выведем в окно:
В результате работы скрипта получим строку «1 2 3», что соответствует записанному ранее массиву. Обратите внимание: размер массива не был определен, и при вызове функции FileReadArray() он тоже не указывался, произошло считывание всего файла. Однако в файле может находиться не один массив, а любое их количество, и они могут иметь различные типы. Поэтому было бы неплохо сохранять в файл и сведения о размере файла. Запишем в файл два массива: один типа int, второй типа double. Но перед ними запишем по переменной int с их размерами:
Этот код находится в приложении в скрипте «sTestFileWriteArray2».
Теперь, при чтении файла, сначала прочитываем размер массива, затем будем считывать в массив указанное количество элементов:
Этот код находится в приложении в скрипте «sTestFileReadArray2».
В результате работы скрипт выведет сообщение: 3 : 1 2 3 — 2 : 1.2 3.4, что соответствует размерам и содержимому ранее записанных в файл массивов.
При чтении массивов функцией FileReadArray() автоматически выполняется масштабирование массива, но имейте в виду: масштабирование выполняется, только если текущий размер меньше, чем количество считываемых элементов. Если же размер массива больше, размер не меняется, только выполняется заполнение части массива.
Работа с массивами структур совершенно идентична работе с массивами стандартных типов, поскольку размер структуры определен конкретно (отсутствуют динамические массивы и строки). Пример с массивами структур не будет приводиться, поэкспериментируйте самостоятельно.
Хотелось бы еще напомнить: поскольку мы можем свободно перемещать указатель по файлу, можно считывать не весь массив, а только какой-то один из его элементов или часть массива. Важно правильно вычислить позицию, в которую нужно переместить указатель. Пример чтения отдельных элементов тоже не будет приводиться в целях экономии объема статьи. Поэкспериментируйте с этим самостоятельно.
Бинарные файлы, строки, массивы строк
Для записи строки в бинарный файл используется функция FileWriteString(), в которую передаются два обязательных параметра: хэндл файла и записываемая в файл строка. Третий параметр необязательный: можно указать количество записываемых символов, если нужно записать не всю строку целиком.
Чтение строки выполняется функцией FileReadString(). В ней первым параметром указывается хэндл, а второй— необязательный — используется для указания количества считываемых символов.
В общем принцип записи/считывания строк очень похож на принцип работы с массивом: строка аналогична всему массиву, а один символ строки аналогичен одному элементу массива, поэтому не будем рассматривать пример записи/считывания одной строки. Рассмотрим более сложный пример: запись и чтение строкового массива. Сначала в файл запишем переменную int с размером массива, потом в цикле будем записывать отдельные элементы, перед каждым записывая переменную int с его размером:
В приложении этот код находится в скрипте «sTestFileWriteStringArray».
При чтении сначала прочитаем размер массива, затем изменим его размер и будем считывать отдельные элементы, предварительно считывая их размеры:
В приложении этот код находится в скрипте «sTestFileReadStringArray».
Общая папка для файлов
До сих пор мы имели дело с файлами, располагающимися в папке MQL5/Files. Но это не единственное место, где могут располагаться файлы. В редакторе MetaEditor в главном меню выполните команду: Файл — Открыть общую папку данных. Откроется папка, в которой вы увидите папку Files. В этой папке тоже могут располагаться файлы, доступные из программ, написанных на MQL5. Обратите внимание на путь к ней (рис. 12):
Рис. 12. Путь к общей папке данных
Путь к общей папке данных никак не связан с путем к терминалу и путем к папке Files, с которой мы имели дело в течение всей статьи. Сколько бы терминалов у вас не работало (в том числе запущенных с ключом «/portable»), для всех них будет открываться одна и та же общая папка.
Пути к папкам можно определить программно. Путь к папке данных (в которой располагается папка MQL5/Files с которой мы имели дело в течение всей статьи):
Путь к общей папке данных (в которой располагается папка Files):
Точно так же можно определить и путь к терминалу (корневую папку, в которой установлен терминал):
Так же, как и с папкой MQL5/Files, при работе с файлами из общей папки нет необходимости указывать полный путь, достаточно в комбинацию флагов, передаваемых функции FileOpen(), добавить флаг FILE_COMMON. Некоторые файловые функции имеют непосредственно параметр для указания флага общей папки. К таким функциям относятся, в частности, FileDelete(), FileMove(), FileCopy().
Скопируем файл «test.txt» из папки MQL5/Files в общую папку данных:
В приложении этот код находится в скрипте «sTestFileCopy». После исполнения скрипта в общей папке Files появится файл «test.txt». Если запустить скрипт второй раз, получим сообщение об ошибке. Чтобы сообщения об ошибке не было, необходимо разрешить перезапись файла, добавить флаг FILE_REWRITE:
Теперь скопируем файл из общей папки в эту же папку с другим именем (в приложении скрипт «sTestFileCopy2»):
А теперь — из общей папки в папку MQL5/Files (в приложении скрипт «sTestFileCopy3»):
Функция FileMove() вызывается идентично, только копия не создается, а файл перемещается (или переименовывается).
Файлы в тестере
Вся работа с файлами, рассмотренная до этого момента, касалась работы программ MQL5 (скриптов, экспертов, индикаторов) работающих на счете (запущенных на графике). При работе эксперта в тестере все обстоит совсем иначе. Тестер в MetaTrader5 имеет возможность выполнения распределенного (облачного) тестирования с использованием удаленных агентов. Грубо говоря, прогоны оптимизации 1-10 (цифры, разумеется условные) выполняются на одном компьютере, одновременно выполняются прогоны 11-20 на другом компьютере и т.д. От этого возникают некоторые сложности и, соответственно, особенности при работе с файлами. Рассмотрим эти особенности и выведем принципы, которых надо придерживаться при работе с файлами в тестере.
Если при обычной работе с файлами функция FileOpen() обращается к файлам, расположенным в папке MQL5/Files, которая находится в папке данных терминала, то при тестировании выполняется обращение к файлам в папке MQL5/Files, которая находится в папке агента тестирования. Если файлы нужны только в процессе одного прохода оптимизации (или одиночного тестирования), например, для хранения данных о позиции или отложенных ордерах, то все нормально, только нужно очистить файлы перед очередным проходом (при инициализации эксперта). Если же файл будет использоваться для определения каких-либо параметров работы эксперта и скорее всего, создается вручную, то он будет располагаться в папке MQL5/Files папки данных терминала. Это означает, тестируемый эксперт его не увидит. Для того, чтобы эксперт имел доступ к этому файлу, его нужно передать агенту. Это делается в эксперте через указание свойства «#property tester_file». Таким образом можно передать любое количество файлов:
Однако, если даже файл указан через » «#property tester_file», то если выполнить в него запись, эксперт выполнит запись в копию файла, расположенную в папке агента тестирования. Файл в папке данных терминала останется без изменений. Дальнейшее чтение файла экспертом будет выполняться из папки агента, то есть, будет читаться измененный файл. Значит, если в процессе тестирования и оптимизации эксперту нужно сохранять какие-то данные для дальнейшего анализа, сохранение данных в файл неприменимо, для этих целей нужно пользоваться фреймами.
Если не использовать удаленные агенты, можно работать с файлами из общей папки (при открытии файла указывать флаг FILE_COMMON). В этом случае нет необходимости указывать имя файла в свойствах эксперта, и эксперт сможет выполнять в файл запись. Короче говоря, при использовании общей папки данных нет никаких особенностей в работе с файлами из тестера, кроме того, что вы не должны пользоваться удаленными агентами. Также при этом нужно следить внимательно за именами файлов, чтобы тестируемый эксперт не испортил файл, используемый реально работающим экспертом. Определить работу в тестере можно программно:
В случае тестирования нужно использовать другие имена файлов.
Общий доступ к файлам
Как уже упоминалось в этой статье, если файл открыт, то открыть его второй раз не получится: будет выдана ошибка. Если с файлом уже работает одна программа, то работать с ним в другой программе будет невозможно, пока он не будет закрыт. Однако MQL5 предоставляет возможность общего использования файлов. Для этого при открытии файла необходимо указать дополнительный флаг FILE_SHARE_READ (общий доступ для чтения) или FILE_SHARE_WRITE (общий доступ для записи) . Несмотря на наличие таких возможностей, пользоваться ими нужно очень аккуратно и с пониманием дела. Операционные системы на сегодняшний день многозадачны, поэтому никто не гарантирует последовательности в выполнении действий запись — чтение. Если разрешить общий доступ на запись и чтение, может получиться так, что одна программа пишет, а другая тут же читает записанное не до конца. Таким образом, требуется принятие мер по синхронизации обращений к файлу разных программ. Эта задача довольно сложная и значительно выходящая за пределы данной статьи. К тому же, скорее всего, можно обойтись без синхронизации и без совместного доступа к файлам (что и будет показано чуть ниже на примере использования файлов для обмена данными между терминалами).
Единственный случай, когда можно смело открывать файл с общими правами на чтение (FILE_SHARE_READ) и когда разрешение такого доступа оправдано, — это случай, если файл используется для определения каких-то параметров работы эксперта или индикатора, типа файла конфигурации. Файл создается вручную или дополнительным скриптом, затем считывается несколькими экземплярами эксперта или индикатора при инициализации. При инициализации несколько экспертов могут попытаться открыть файл почти одновременно, поэтому следует предоставить им такую возможность. При этом есть гарантия, что при чтении файла в него не идет запись.
Использование файлов для обмена данными между терминалами
Сохраняя файлы в общую папку, можно обеспечить обмен данными между терминалами. Конечно, использование файлов для таких целей не является лучшим решением, но в некоторых случаях может пригодиться. Задача решается просто: никакой общий доступ к файлу не используется, файл открывается обычным образом. Пока выполняется запись, больше никто не может открыть файл. По окончанию записи файл закрывается, и другие экземпляры программ могут его прочитать. Ниже приведен код функции передачи (записи) данных скрипта «sTestFileTransmitter»:
Делается несколько попыток открытия файла. Если файл открылся, выполняется запись, закрытие файла и относительно длинная пауза (функция Sleep(100)), чтобы другие программы успели открыть файл. В случае ошибки открытия выполняется короткая пауза (функция Sleep(1)), чтобы как можно быстрее «поймать» момент, когда файл будет свободен.
Функция приема (чтения) работает по такому же принципу. В приложении скрипт с функцией приема имеет имя «sTestFileReceiver», полученные данные скрипт выводит функцией Comment(). Запустите скрипт-передатчик на одном графике, скрипт-приемник на другом графике (или в другом экземпляре терминала).
Еще несколько функций
Уже рассмотрены почти все функции по работе с файлами, осталось несколько очень редко используемых: FileSize(), FileTell(), FileFlush(). Функция FileSize() возвращает размер открытого файла в байтах:
В приложении этот код находится в скрипте «sTestFileSize». При выполнении этого скрипта откроется окно с сообщением о размере файла.
Функция FileTell() возвращает положение файлового указателя открытого файла. Функция используется настолько редко, что мне даже сложно придумать с ней пример. Просто отметим ее существование и вспомним о ней в случае необходимости.
Функция FileFlush() более полезна практически. Как написано в документации, функция выполняет «сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода». Эффект от вызова функции такой же, как от закрытия файла и его нового открытия (только экономней, и файловый указатель остается там, где был). Как известно, файлы хранятся в виде записей на жестком диске. Однако, пока файл открыт, запись выполняется в буфер, а не на диск. Запись на диск произойдет при закрытии файла. Поэтому, в случае аварийного завершения работы программы, поскольку файл не будет закрыт, данные не сохранятся. Если после каждой записи данных в файл вызывать FileFlush(), данные будут сохранены на диск, и аварийное завершение работы программы не доставит проблем.
Работа с папками
Кроме работы с файлами, в MQL5 есть несколько функций по работе с папками: FolderCreate(), FolderDelete(), FolderClean(). Функция FolderCreate используется для создания папки. У всех функций по два параметра. Первый параметр обязательный для имени папки. Второй дополнительный — для флага FILE_COMMON (для работы с папками в общей папке данных).
FolderDelete() используется для удаления указанной папки. Удалить можно только пустую папку. Но очистка содержимого папки не является проблемой, для этого существует функция FolderClean(), функция полностью очищает указанную папку, в том числе удаляет и вложенные папки и файлы.
Получение списка файлов
Иногда при работе с файлами бывает нужно найти файл, имя которого точно неизвестно. Имя файла может состоять из известного начала и иметь неизвестное числовое окончание, например «file1.txt», «file2.txt» и т.д. В этом случае можно получить имена файлов по маске с использованием функций FileFindFirst(), FileFindNext(), FileFindClose(). Данные функции находят не только файлы, но и папки. Имя папки можно отличить от имени файла по обратному слэшу в конце.
Напишем полезную функцию для получения списка файлов и папок. В один массив соберем имена файлов, в другой— имена папок:
Поэкспериментируем с этой функцией, будем вызывать ее из скрипта следующим образом:
В приложении скрипт имеет имя «sTestFileGetFiles». Обратите внимание на маску поиска «*»:
С такой маской будут найдены все файлы и папки, расположенные в папке MQL5/Files.
Чтобы найти все файлы и папки, начинающиеся со слова «test», подойдет маска «test*». Если нужны только файлы с расширением «txt», потребуется маска «*.txt», и т.п. Попробуйте создать папку и в ней несколько файлов, например, папку «folder1». Для получения списка файлов, расположенных в ней, подойдет маска «folder1\\*».
Кодовая страница
В этой статье в примерах кода часто использовалась функция FileOpen(). Поговорим об одном из ее параметров, который до сих пор оставался без внимания. Это параметр codepage — кодовая страница. Кодовая страница — это таблица соответствия текстового символа и его числового значения. Более понятно будет на примере с кодировкой ANSI. В этой кодировке в таблице символов всего 256 символов, то есть, для разных языков используется своя кодовая страница, определяемая в настройках операционной системы. Этой кодовой странице соответствует константа CP_ACP, с которой по умолчанию вызывается функция FileOpen(). Очень маловероятно, что кому-то когда-нибудь потребуется использовать другую кодовую страницу, поэтому нет смысла вдаваться в подробности по данной теме, достаточно общего знакомства.
Работа с файлами без ограничений
Иногда бывает нужна возможность работать с файлами за пределами файловой «песочницы» терминала (за пределами папки MQL5/Files и общей папки). Это может значительно расширить функциональность программ на MQL5: можно будет обрабатывать файлы с исходным кодом, автоматически вносить в них изменения, на лету генерировать файлы изображений для графического интерфейса, генерировать код и т.п. Если вы будете делать это для себя либо пользоваться услугами программиста, которому вы доверяете, это допустимо. В статьях уже имеется материал на эту тему: статья Файловые операции через WinAPI. Есть и более простой способ. MQL5 располагает всеми средствами работы с файлами, поэтому достаточно переместить требуемый файл в «песочницу» терминала, выполнить с ним необходимые действия и переместить назад. Для этого достаточно всего лишь одной функции WinAPI — CopyFile.
Чтобы программа MQL5 могла использовать функции WinAPI, необходимо разрешение на их использование. Разрешение включается в настройках терминала (Главное меню — Сервис — Настройки — Советники — Разрешить импорт DLL), в этом случае включается общее разрешение на терминал для всех вновь запускаемых программ. Общее разрешение можно не включать, а включать его только для запускаемой программы. Если программа выполняет обращение к функциям WinAPI или прочим DLL, у нее в окне свойств появится вкладка «Зависимости» и в ней опция «Разрешить импорт DLL».
Существует два варианта функции CopyFile: CopyFileA() и более современная CopyFileW(). Обе функции можно использовать, но для функции CopyFileA() необходимо предварительно преобразовывать строковые аргументы. Как это делается, можно посмотреть в статье Основы программирования на MQL5 — Строки в разделе «Вызов функций API». Лучше использовать более современную функцию CopyFileW(), для нее строковые аргументы указываются как есть, без лишних преобразований.
Для использования функции CopyFileW() cначала надо выполнить ее импорт. Она располагается в библиотеке «kernel32.dll»:
В приложении этот код располагается в скрипте с именем «sTestFileWinAPICopyFileW».
Скрипт будет копировать файл со своим собственным исходным кодом в папку MQL5/Files:
При успешной работе функция CopyFileW() возвращает 1, иначе 0. Третий параметр функции указывает, можно ли перезаписывать файл при существовании файла назначения: 0 — можно, 1 — нельзя. Запустите скрипт. Если он отработает успешно, проверьте папку MQL5/Files.
Имейте в виду, что операционная система накладывает свои ограничения на возможности копирования файлов. Есть так называемые «параметры контроля учетных записей». Если они включены, то в некоторые места (или из некоторых) файлы не получится копировать. Например, невозможно скопировать файл в корень системного диска.
Несколько полезных скриптов
Кроме создания полезных функций по работе с файлами, создадим еще пару полезных скриптов, для закрепления изученного в статье материала. Создадим скрипт экспорта котировок в файл csv и скрипт для экспорта результатов торговли, тоже в файл csv.
Скрипт экспорта котировок будет иметь параметры для определения даты начала и даты окончания данных и параметры, определяющие, использовать ли эти даты, или же экспортировать все данные полностью. Чтобы у скрипта открывалось окно свойств, необходимо указать соответствующее свойство:
Далее объявляются внешние параметры:
Пишем код в функции OnStrat() скрипта. В соответствии с параметрами скрипта определяем даты:
Если используются переменные для определения даты, то берутся их значения, иначе используется TimeCurrent() для времени окончания, а время начала определяется по времени первого бара.
Располагая датами, копируем котировки в массив типа MqlRates:
Сохраняем данные из этого массива в файл:
При успешном выполнении скрипт откроет окно с сообщением об успешном сохранении файла или же выдаст сообщение об ошибке. В приложении готовый скрипт имеет имя «sQuotesExport».
Теперь перейдем к скрипту сохранения истории торговли. Начало примерно такое же: сначала внешние переменные, только с определением времени начала все проще — при запросе истории достаточно указать время начала 0:
Записываем первую строку с наименованием полей:
Проходя в цикле по всем сделкам, записываем в файл сделки buy и sell:
Обратите внимание: для типа сделки (buy/sell) и направления (in/out) выполняется преобразование значений в строки, а некоторые значения типа double преобразуются в строки с двумя знаками после запятой.
В конце закрываем файл и выводим сообщение:
В приложении этот скрипт имеет имя «sHistoryExport».
Дополнительные материалы по теме
В разделе статей имеется большое количество материалов, в той или иной мере, касающихся работы с файлами и заслуживающих внимания:
Заключение
Вот и рассмотрены все функции по работе с файлами в MQL5. Казалось бы, это довольно узкая тема, однако статья получилось довольно объемная. При этом некоторые вопросы, касающиеся работы с файлами, рассмотрены лишь поверхностно, без достаточного количества практических примеров. Но наиболее часто встречающиеся задачи по работе с файлами рассмотрены очень подробно, в том числе и особенности работы с файлами в тестере. Кроме того, создано несколько полезных функций, да и все учебные примеры были практически ориентированными и логически завершенными. Весь приведенный код прилагается к статье в виде скриптов.
как создать бин файл на windows 10
Формат пакета Android, также известный как APK, является форматом приложений Android. Но иногда из-за ошибки файлы APK сохраняются как BIN. В этих случаях вы не можете установить или открыть файл без дополнительных действий, например, с помощью стороннего приложения. Хорошо, что есть несколько простых в установке и использовании приложений для управления файлом BIN.
Как Открыть Файлы BIN
Есть три способа открыть BIN-файл без использования программы. Это:
Запись файла BIN
Для записи файла BIN на CD или DVD вам понадобится файл CUE. А если у вас нет файла CUE, вы можете легко его создать. Чтобы создать файл CUE, создайте в блокноте файл со следующем содержимым.
FILE “filename.bin” BINARY
TRACK 01 MODE1/2352
INDEX 01 00:00:00
После создания файла CUE выберите программу для записи файла. В зависимости от программы может потребоваться загрузить файл CUE или файл BIN. После того, как вы загрузили файл, появится всплывающее окно с информацией о том, сколько места на диске он займет. После правильной загрузки образа вставьте чистый диск и запустите процесс записи. После завершения записи проверьте его на устройстве, для которого вы его делали.
Убедитесь, что все загружено, как должно.
Монтирование образа
Чтобы смонтировать образ, вам необходимо установить программное обеспечение виртуального привода, которое имитирует физический оптический привод в вашей системе. Это облегчит процесс монтирования файла образа. Программное обеспечение виртуального привода заставляет ваш компьютер думать, что диск был вставлен, и образ загружается так, как если бы он был запущен с диска.
Существует несколько вариантов виртуальных дисков, но самым популярным и бесплатным является WinCDEmu. Тем не менее, вы должны быть осторожны при его установке, потому что он часто пытается установить дополнительное программное обеспечение или панели инструментов браузера, который вам не нужен.
Программное обеспечение виртуального диска поместит значок на ваш рабочий стол. Все, что вам нужно сделать, это щелкнуть правой кнопкой мыши значок, навести курсор на один из поддельных дисков и выбрать параметр подключения образа. Теперь просмотрите файл CUE и загрузите его, чтобы смонтировать образ.
После завершения монтирования ваша система будет делать вид, будто вы вставили физический диск, и может открыться автозапуск. Когда вас спросят, что вы хотите сделать с диском, используйте файл образа, как если бы он был на вставленном CD или DVD.
Преобразование BIN в формат ISO
Другой способ открыть — преобразовать его в ISO, и для этого вам понадобится программа преобразования. После того, как вы преобразовали BIN в ISO, вы можете смонтировать или записать его с помощью многих других программ. Итак, выберите инструмент-конвертер и откройте его. В меню выберите BIN в ISO и найдите файл BIN. Выберите имя для вашего нового файла ISO и нажмите «конвертировать».
После завершения преобразования вы можете использовать виртуальный привод для его монтирования или использовать любую программу записи дисков, чтобы записать его.
Приложения для открытия файла BIN
NTI Dragon Burn 4.5
Dragon Burn от NewTech Infosystems, Inc., который работает только с Mac и Powerbook, может быстро и легко создавать аудио, смешанные CD и DVD, данные и т. д. С его помощью вы можете одновременно записывать несколько CD или DVD, а также поддерживает DVD-R приводы, как внутренние, так и внешние.
Вы также можете записывать компакт-диски с расширенными возможностями, включая новейшие приводы 52x CD-R и 24x CD-RW.
Roxio Creator NXT Pro 7
Roxio Creator NXT Pro 7 более мощный и универсальный и может удовлетворить все ваши творческие и цифровые потребности. Вы можете снимать видео с нескольких камер, а также записывать свой экран. С его помощью вы можете защитить свой носитель, легко записать и скопировать его с помощью ведущих инструментов в отрасли, а также зашифровать файлы на USB или диск.
Он также предлагает все необходимое для создания и редактирования ваших изображений.
DT Soft DAEMON Tools
DAEMON, или Disk And Execution Monitor, используется для эмуляции 4 DVD-ROM и CD-ROM одновременно. С его помощью вы можете быстро записать образ, потому что он не использует формат контейнера. Инструмент может монтировать многие распространенные форматы. Он может конвертировать образы из BIN, MDX, ISO и т. д. И записывать их на CD, DVD и Blu-ray диски.
Он также может сжимать или разделять образы дисков и преобразовывать их в несколько файлов, которые можно защитить паролем.
Открытие и установка файла BIN на Android
Если вы пытаетесь открыть файл BIN на своем телефоне Android, вам нужно будет изменить расширение файла на правильное в вашей системе, а затем использовать установщик приложений, чтобы ввести файл.
Найдите установщик приложения и в настройках включите загрузку из неизвестных источников. Подключите телефон к системе и включите его в режим диска. С помощью кнопки «Пуск» на вашей системе выберите компьютер. Вы можете просматривать его содержимое на своем смартфоне с помощью съемного запоминающего устройства. Найдите файл BIN и измените его имя на APK.
Затем отключите телефон от компьютера. Запустите установщик приложения, откройте этот APK-файл и установите его на свой телефон.
Файлы BIN довольно старые, но они все еще используются. Они используются для образов компакт-дисков и некоторых антивирусных программ. Это может быть что угодно, изображение или звуковые данные для игры или ПЗУ для эмулятора. BIN-файлу необходим CUE-файл. Вы можете записать его на CD или DVD, чтобы открыть или смонтировать образ вертикального привода.
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 3.7 / 5. Количество оценок: 3
Как установить файл bin

Установка файла BIN

С проблемой установки BIN-файла сталкиваются многие пользователи. Самая распространенная из них — это невозможность открыть и инсталлировать пакет штатными способами. Операционная система не может прочитать проблемный формат данных и выводит сообщение об ошибке. Сегодня разберемся, какое ПО требуется для редактирования, чтения файла BIN или его конвертации.
Открытие BIN-файла
В двоичном формате может храниться чаще всего образ старой игры или программы. Он, как правило, сохраняется с метаданными, которые содержат в себе информацию для распознавания объекта и управления им. Для открытия формата BIN воспользуемся UltraISO и Daemon Tools Lite.
Прежде чем приступить к решению проблемы, убедитесь в том, что у вас есть файл CUE, который описывает содержимое образа диска. Без него дальнейшие шаги могут не осуществиться. Поэтому вам нужно будет сначала создать текстовый документ и сохранить его с расширением CUE.

Напечатайте в документе следующие данные. Вместо «filename» пропишите имя вашего файла BIN.
FILE «filename.bin» BINARY
TRACK 01 MODE1/2352
INDEX 01 00:00:00

Сохраните запись (Ctrl+Shift+S) с расширением CUE и именем бинарника в той же папке, где находится образ диска.

Способ 1: Монтирование образа диска CD/DVD
Так как бинарник представляет собой образ, то открыть его можно в эмуляторе виртуальных дисков. Прежде всего нужно смонтировать образ диска, а затем просматривать его в файловом менеджере так, как если бы это был физический CD/DVD.
Daemon Tools Lite
Приложение может похвастаться рядом необходимых функций для работы с образами CD/DVD и твердотельными накопителями. Оно в частности позволяет монтировать образы на виртуальный привод и просматривать их в проводнике. Программа очень проста в использовании и не требует от пользователя глубокого понимания всех процессов при настройке.
-
Откройте Daemon Tools Lite и выберите опцию «Быстрое монтирование».

Выберите образ BIN для монтирования в виртуальный привод.

А теперь загляните в приложение. В нижней части окна отобразится только что смонтированный вами виртуальный привод.

Зайдите в Проводник, там появится созданный вами виртуальный дисковод. Нажмите по нему ПКМ и выберите «Открыть». Теперь можете просматривать содержимое файла BIN.

UltraISO
UltraISO — отличный помощник по созданию, редактированию и конвертированию различных образов дисков. Приложение предлагает также эмуляцию и запись компакт-дисков CD/DVD. С помощью данной программы вы сможете представить образ как виртуальный диск, то есть просматривать и изменять состав файла BIN в проводнике.
-
Запустите приложение UltraISO. Откройте вкладку «Инструменты».

В выбранном разделе кликните «Монтировать в виртуальный привод».

В появившемся окне настройки выберите виртуальный привод из имеющихся или воспользуйтесь автонастройкой. Затем укажите путь к файлу образа диска и нажмите «Монтировать».

Загляните в Проводник. Нажмите ПКМ по созданному CD-дисководу и щелкните на «Открыть». Содержимое файла BIN отобразится в файловом менеджере.

Способ 2: Конвертация файла BIN в другой формат
Если открыть бинарник не удалось первым способом, то, вероятнее всего, ваш эмулятор виртуальных дисков не читает файлы формата BIN. Чтобы исправить проблему, достаточно произвести преобразование в более современный формат (ISO, например). Это можно сделать в программах, предназначенных для работы с образами дисков. Покажем вам конвертацию через UltraISO.
-
Запустите приложение. В разделе «Инструменты» воспользуйтесь опцией «Конвертировать».

В окне настройки укажите путь к образу диска, папку для сохранения и формат выводимых данных. Затем кликните «Конвертировать».

Способ 3: Эмулятор игровой приставки
Если вы уверены, что ваш бинарник — это образ игры, то для её установки на компьютер понадобится эмулятор игровой приставки. Это программная оболочка, которая имитирует работу аппаратной части устройства. Все, что нужно для корректной работы — установить эмулятор игровой консоли и загрузить образ игры. Рассмотрим несколько простых в использовании симуляторов игровых приставок.
Retro Arch
Retro Arch — это универсальный интерфейс с открытым исходным кодом для эмуляторов игровых приставок, игровых движков, медиаплееров. Пользоваться данным приложением очень просто и удобно.
-
После запуска подходящего для вашего ПК дистрибутива, установите программу поэтапно с помощью мастера установки. Откройте приложение и выберите настройку «Загрузить ядро».

Из списка появившихся ядер выберете подходящее. Оно автоматически загрузится в каталог и отобразится в окне загруженных ядер в приложении.

Далее перейдите на вкладку «Загрузить контент» и укажите путь к вашему BIN-образу игры.

Затем укажите ядро, с которого будете загружать образ.


Если данное решение вам по каким-либо причинам не подходит, предлагаем воспользоваться одним из аналогов.
Super Nintendo
Пожалуй, один из лучших эмуляторов игровых консолей. Софт от Nintendo поддерживает большое число игр и загружает любой ROM. С таким замечательным симулятором игровой приставки не должно возникнуть никаких проблем.

Sega Genesis
Это более продвинутый в плане использования симулятор игровой приставки. С ним вы можете сохранять игру в любой момент, подключаться к серверу, настаивать графику и звук.

Итак, чтобы открыть файл BIN, необходимо знать, к какой категории он относится. Если это образ игры или системы, то следует его открывать в эмуляторе виртуальных дисков или игровых консолей. Если это медиаконтент, попробуйте конвертировать его в другой читаемый формат данных.
Как устанавливать bin файлы в Linux
Не смотря, на то, что большинство программ в операционной системе Linux (в моем случае Ubuntu) можно установить из Центра приложений, тем самым обеспечивая совместимость с системой, иногда вам может понадобится установить новую версию программы или наоборот, старую, которой может не оказаться в списке.
Установка bin файлов в Linux
Консольный вариант
1. Для начала в файловом менеджере, нужно найти наш бинарник.

2. Откроем терминал, сочетанием клавиш Ctrl+Alt+T.

3. Зайдем в режим суперпользователя (под рутом). Для этого введем следующую команду в терминале:
Затем нужно ввести пароль.

4. Теперь, в терминале нам нужно зайти в ту директорию, где расположен наш бинарник. В моем случае это будет так:

chmod +x thefile.bin
В моем случае это выглядит так:
chmod +x clip2net.bin

6. Теперь выполните его. Для этого находясь уже в той директории, где находится бинарный файл введем точку и слэш, затем имя файла. В случае со мной это выглядит так:

7. После этой команды, установщик программы запустился и спрашивает меня на каком языке я хотел бы установить bin файл в linux.

8. Далее устанавливаем программу как обычно это делается в ОС Windows.

Графический вариант
Он ненамного проще, но для новичков, которые недавно перешли с Windows будет понятнее. Первые 3 пункта из консольного варианта все же придется выполнить. Затем нужно выбрать файл, нажать правой кнопкой мыши, выбрать пункт «свойства». На вкладке права, нужно поставить галочку напротив пункта «Разрешить выполнение файла как программы».

Закрываем окно. И перетаскиваем этот файл в терминал, запущенный от суперпользователя, имя файла и путь уже впишутся автоматически, остается лишь нажать на кнопку «Enter». Далее, вы можете установить bin файл, как и в первом варианте. На этом все.

Подобное расширение содержит двоичный код, то есть информацию, понятную только для компьютера. Чтобы получить доступ к данным, необходимо преобразовать файл в более подходящий формат.
Как правило, под незнакомым форматом скрывается установочный документ для игры (чаще всего устаревшей), но поскольку в нем могут храниться и другие важные данные, перед началом работы лучше сделать резервную копию.
Пошаговая инструкция
После создания копии можно приступать к конвертированию. Для этого используются специальные программы для открытия bin форматов. Подробный список мы приведем ниже, а пока, чтобы вы знали, в какой очередности выполнять действия, изложим пошаговую инструкцию для работы:
Создать резервную копию и сохранить ее в удобном для вас месте. Если во время преобразования будет сбой, вы всегда сможете повторить попытку, а вся информация сохранится.
Определить, чем лучше открыть bin, воспользовавшись списком программ ниже.
Указать программе месторасположение файла для воспроизведения данных.
После этого вы получите доступ ко всей информации, и сможете с легкостью извлечь ее. На первый взгляд, все просто, но на самом деле успех преобразования зависит от многих факторов: вида файла, типа используемой программы и операционной системы.
Как открыть bin файл на Windows 10
Операционная система Windows 10 – одна из самых популярных, но у многих пользователей возникают сложности в работе, так как последняя версия обладает некоторыми особенностями, которых не было в более ранних вариантах.
Именно поэтому работа с бин форматом также имеет некоторые особенности, которые обязательно стоит принять во внимание.
Способы
Проще всего использовать приложение Блокнот. Но у данного способа есть один существенный недостаток: вы получите доступ к информации, но увидите только набор символов (двоичный код), который не принесет вам никакой пользы.
Если вы действительно хотите узнать, что хранится в документе, стоит воспользоваться одним из более действенных способов:
Проверьте размер. Если он соответствует CD или DVD диску, значит, вы имеет дело с образом, и для открытия можно использовать одну из популярных утилит: Daemon Tools, Ultra ISO или Alcohol 120% (Рисунок 2).
После этого достаточно выбрать функцию быстрого монтирования, кликнуть на файле и смонтировать образ.
Небольшие файлы бин, как правило, содержат данные для прошивки или драйвера. Открыть его еще проще: нужно найти инструкцию к устройству, для которого предназначены данные. Из нее вы получите всю необходимую информацию для работы.

Иногда подобный формат используется в качестве установочного файла для софта или игр.
Примечание: Пользователю нет необходимости открывать его, так как документ не содержит никакой полезной для обычного юзера информации.
Инструкция
Как уже говорилось выше, для открытия понадобится специальный софт – утилиты, предназначенные для создания, монтирования и преобразования образов.
Достаточно скачать одну из таких программ, установить ее на компьютер и воспользоваться функцией быстрого монтирования. Уже через несколько секунд вы получите преобразованный документ, из которого сможете получить всю необходимую информацию
Как открыть bin файл на Windows 7
По сути, работа на операционке Windows 7 ничем не отличается от 10 версии. В первую очередь нужно определить тип файла, выбрать подходящую программу для работы и преобразовать формат в более доступный.
Именно на 7 Виндовсе лучше всего работать с программами-утилитами, предназначенными для монтирования образов и получения доступа к данным. Но, кроме текстовой информации, бин-файл может содержать видео, которое также воспроизводят с помощью специального софта.
Порядок действий:
Порядок открытия файлов очень простой. Для этого достаточно выполнить несколько простых действий:
Загрузить утилиту (к примеру, Daemon Tools);
Указать программе место расположения нужных данных;
Выбрать функцию быстрого монтирования и получить доступ к информации с образа диска всего за несколько секунд.
В случае полной уверенности, что файл содержит видео, инструкция будет еще более простой. Кликнув на значке правой кнопкой мыши, выбираем вкладку «Открыть с помощью» и из выпадающего списка программ подбираем ту, которая лучше всего справится с поставленной задачей.
Примечание: По опыту можно сказать, что видео в формате бин отлично открывает проигрыватель VLC Media Player (Рисунок 3).

Открыть файл bin онлайн
К сожалению, онлайн-сервисов, предназначенных для работы с подобными документами через Интернет не существует. Для этого есть несколько причин. Во-первых, в большинстве случаев подобные файлы не предназначены для открытия. И во-вторых, широкое разнообразие типов формата делает онлайн-открытие проблематичным.
Именно поэтому, если у вас появилась жизненная необходимость открыть документ, лучше сразу же скачать подходящую программу и не тратить время на поиски несуществующих онлайн-сервисов.
Как открыть файл bin через Daemon Tools
Одной из самых популярных программ для открытий бин файлов считается Daemon Tools. Это простая, но функциональная утилита, которую можно скачать и установить бесплатно, а ее интерфейс доступен даже начинающему пользователю.
Если никогда не пользовались подобным софтом раньше, воспользуйтесь нашей пошаговой инструкцией, которая поможет получить доступ к необходимым данным (Рисунок 4).

Пошаговая инструкция
Чтобы использовать софт, в первую очередь нужно его скачать и установить на ПК. Для домашнего использования вполне достаточно бесплатной версии.
В дальнейшем открытие бин файла с помощью данной программы проводится так:
Нужный документ достаточно просто перетащить в открытое окно программы, а образ смонтируется автоматически;
Также можно смонтировать образ через функцию монтирования образов, щелкнув на значке программы правой кнопкой мыши.
После этого пробуйте запустить файл. Если вы все сделали правильно, доступ к данным будет предоставлен автоматически.
Программа для открытия bin файлов
Подбирая, чем открыть файл bin на компьютере, начинающий пользователь может запутаться в широком разнообразии софта. Современные утилиты обладают достаточной простой и функциональность, и отлично подходят для использования в домашних условиях.
Мы подготовили для вас список лучших программ, которые помогут быстро получить доступ к нужным данным.
Список программ
Среди софта, предназначенного для получения доступа к бин, выделяются несколько программ. Все они есть в бесплатном доступе, быстро и легко устанавливаются, а простой интерфейс не вызывает сложностей с использованием.
К популярным утилитам относят:
VLC Media Player – проигрыватель, с помощью которого можно за несколько секунд открыть видео, сохраненное в формате бин;
Alcohol 120% — функциональная утилита, которая позволяет не только конвертировать форматы и открывать документы, но и монтировать собственные образы;
Daemon Tools – самая популярная программа для монтирования образов в домашних условиях;
Ultra ISO – софт, который отличается такими же характеристикам, как и приложения, описанные выше, но отличается более высокой функциональностью.
Видео-инструкция как открывать эти файлы в Windows:
Как установить BIN — программы и инструкции
При скачивании некоторых игр (особенно старых) обнаруживается, что среди файлов отсутствует привычный инсталлятор «Setup.exe» или «Install.exe», вместо него имеется только один или несколько BIN-файлов. Зачастую такое происходит по вине того, кто производил снятие образа с CD/DVD-диска — он просто допустил ошибку, забыв приложить к BIN-файлу еще один сопутствующий CUE-файл. Эту ошибку можно исправить самостоятельно.
Но BIN-файлы — это далеко не всегда образы дисков. Файл формата BIN может являться чем угодно. Это может быть, например, прошивка BIOS компьютера, смартфона, роутера, сканера или другого компьютеризированного оборудования, игры от различных старых приставок (Sega, Dendy и т.д.) или даже самостоятельный исполнимый файл (как «EXE»). Дальнейшая инструкция поможет только в случае, если имеющийся BIN-файл является именно образом диска.
Создание CUE-файла
Здесь все очень просто:

FILE «имя_файла.bin» BINARY
TRACK 01 MODE1/2352
FILE «Game_data.bin» BINARY




Установка программы для открытия BIN-файла



Остались вопросы, предложения или замечания? Свяжитесь с нами и задайте вопрос.
Как создать bin файл
При скачивании некоторых игр (особенно старых) обнаруживается, что среди файлов отсутствует привычный инсталлятор «Setup.exe» или «Install.exe», вместо него имеется только один или несколько BIN-файлов. Зачастую такое происходит по вине того, кто производил снятие образа с CD/DVD-диска — он просто допустил ошибку, забыв приложить к BIN-файлу еще один сопутствующий CUE-файл. Эту ошибку можно исправить самостоятельно.
Но BIN-файлы — это далеко не всегда образы дисков. Файл формата BIN может являться чем угодно. Это может быть, например, прошивка BIOS компьютера, смартфона, роутера, сканера или другого компьютеризированного оборудования, игры от различных старых приставок (Sega, Dendy и т.д.) или даже самостоятельный исполнимый файл (как «EXE»). Дальнейшая инструкция поможет только в случае, если имеющийся BIN-файл является именно образом диска.
Создание CUE-файла
Здесь все очень просто:
- Создайте рядом с BIN-файлом обычный текстовый документ и назовите его точно так же, как называется сам BIN. Например, если имя BIN-файла — «Game_data.bin», то у текстового файла должно быть имя «Game_data.txt».

- Откройте созданный текстовый документ и построчно скопируйте в него следующее:
FILE «имя_файла.bin» BINARY
TRACK 01 MODE1/2352
INDEX 01 00:00:00
- Замените «имя_файла.bin», оставив кавычки, на имя BIN-файла. Например:
FILE «Game_data.bin» BINARY

- Если в системе включена опция отображения расширений файлов (как на изображениях выше), т.е. после их названия стоит точка, а за ней — «bin», «txt» и т.д., просто сохраните (CTRL + S) отредактированный текстовый файл и закройте его. Затем выделите этот файл для переименования (выделите и нажмите «F2») и замените расширение с «txt» на «cue», нажмите «Да» в открывшемся диалоговом окне.

- Если расширения скрыты, откройте созданный TXT-файл, затем откройте меню «Файл» и выберите в нем пункт «Сохранить как…».

- В нижней части окна «Сохранение» в блоке «Тип файла» установите значение «Все файлы», а в поле «Имя файла» впишите — Game_data.cue (замените «Game_data» на имя имеющегося BIN-файла). Нажмите «Сохранить» и закройте файл.

- Теперь в папке будут находиться 3 файла с одинаковыми именами. Текстовый файл, созданный на первом шаге, можно удалить.
Установка программы для открытия BIN-файла
Образы дисков в формате BIN могут открывать разные программы, например, DAEMON Tools Lite . Скачайте и установите данную программу. Последующие шаги:
«Заливка» откомпилированного в Arduio IDE bin кода в ESP32/ESP8266
Предполагается, что расширение *.bin обозначает бинарный файл. Он необходим для работы других программ и компонентов.
И, чаще всего, идёт в комплекте с исполняющими файлами – данными с расширением *.exe в Windows и динамическими библиотеками .dll для этой же ОС.
Для MacOS это могут быть ещё и данные типа *.app.
Расширение bin представляет собой сокращение слова «бинарный» (binary).
Внутри такого файла может содержаться:
Узнать, чем конкретно открывать данный тип файла .bin, можно по его типу.
Но, так как в большинстве случаев определение такой разновидности затруднительно, не исключено, что придётся воспользоваться несколькими способами открытия.
Загрузка в ESP bin файлов проекта
- На удаленной стороне архив с bin файлами распаковывается в папку Temp.
- Ему также пересылается команда, которая была перехвачена ранее при отправке Arduino IDE бинарника в ESP. Пути к бинарникам ( ) должны быть скорректированы. Команда что-то вроде:
%LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\2.6.1\esptool.exe —chip esp32 —port COM13 —baud 921600 —before default_reset —after hard_reset write_flash -z —flash_mode dio —flash_freq 80m —flash_size detect 0xe000 C:/Temp/ /boot_app0.bin 0x1000 C:/Temp/ /bootloader_dio_80m.bin 0x10000 C:/Temp/ / .ino.bin 0x8000 C:/Temp/ / .ino.partitions.bin
- Убедится, что: Путь к esptool.exe корректный. Версии на стороне разработчика и удаленной могут различаться.
- Указан корректный COM порт и скорость для него.
- Внести исправления в команду, если найдены расхождения.
esptool.py v2.6 Serial port COM13 Connecting…. Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None MAC: 80:7d:3a:f4:74:e4 Uploading stub… Running stub… Stub running… Changing baud rate to 921600 Changed. Configuring flash size… Auto-detected Flash size: 4MB Compressed 8192 bytes to 47… Writing at 0x0000e000… (100 %) Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 13107.5 kbit/s)… Hash of data verified. Compressed 15328 bytes to 9994… Writing at 0x00001000… (100 %) Wrote 15328 bytes (9994 compressed) at 0x00001000 in 0.1 seconds (effective 915.1 kbit/s)… Hash of data verified. Compressed 365136 bytes to 171906… Writing at 0x00010000… (9 %) Writing at 0x00014000… (18 %) Writing at 0x00018000… (27 %) Writing at 0x0001c000… (36 %) Writing at 0x00020000… (45 %) Writing at 0x00024000… (54 %) Writing at 0x00028000… (63 %) Writing at 0x0002c000… (72 %) Writing at 0x00030000… (81 %) Writing at 0x00034000… (90 %) Writing at 0x00038000… (100 %) Wrote 365136 bytes (171906 compressed) at 0x00010000 in 3.1 seconds (effective 947.5 kbit/s)… Hash of data verified. Compressed 3072 bytes to 143… Writing at 0x00008000… (100 %) Wrote 3072 bytes (143 compressed) at 0x00008000 in 0.0 seconds (effective 4096.0 kbit/s)… Hash of data verified. Leaving… Hard resetting via RTS pin…
Бинарные файлы успешно «залиты» в микроконтроллер.
Варианты открытия
Открыть бинарные файлы можно с помощью различных приложений – причём даже тех, которые уже находятся на компьютере по умолчанию.
Например, программы Блокнот, способной просматривать информацию любого типа. Однако в данном случае её отображение будет неправильным и нечитаемым.
Так что, хотя пользоваться Блокнотом не запрещается, делать это совершенно бесполезно.

Рис.2. Отображение содержимого файла .bin, открытого в Блокноте.
Неправильно показывающееся содержимое файла в Блокноте наблюдается при его сравнительно небольшом размере – в пределах нескольких мегабайт.
Но, если информация занимает достаточно места (100, 200 или тысячи МБ), скорее всего она представляет собой образ диска.
И для того чтобы открыть такой файл, стоит воспользоваться соответствующими приложениями
«Заливка» bin файлов OTA (Over The Air)
- Для заливки подготовленных бинарных файлов OTA используется утилита espota.py: ESP8266: https://github.com/esp8266/Arduino/tree/master/tools
- ESP32: https://github.com/espressif/arduino-esp32/tree/master/tools
python espota.py -d -i 192.168.1.10 -f .ino.bin
- Естественно такой вариант «заливки» обновлений не подходит для IoT устройств работающих по GSM, поскольку они находятся за NAT-ом оператора сотовой связи.
Открытие образов
Открыть большие по размеру файлы с расширением bin можно попробовать с помощью утилит, работающих с образами:

Рис.3. Работа с бесплатной версией UltraISO.
Такие утилиты обычно бесплатные или условно-бесплатные, то есть имеют определённый период свободного использования.
При отсутствии таких программ на компьютере следует скачать одну из таких не требующих оплаты вариантов из сети и попробовать открыть файл bin.
При желании, можно попробовать переформатировать файл bin в более привычный для современных эмуляторов вид – с расширением ISO.
Для этого потребуется программа-конвертер – такая как MagicISO, способная изменить формат всего за несколько минут.
Более подробно об открытии файлов .ISO читайте в нашем материале
Как открыть файл .iso
Полезная информация:
Для конвертации видео из одного формата в другой рекомендуем воспользоваться программой Format Factory. Она способна работать с аудио, картинками, документами и прочим.


Как открыть прошивку, драйвер или установщик ПО?
Небольшой по размеру файл bin может оказаться драйвером или прошивкой подключаемого устройства (например, Wi-Fi-роутера).
Определить, как использовать такую информацию, может помочь инструкция к программному обеспечению или устройству.
Скачать специализированное приложение, открывающее и даже изменяющее файлы, можно с официальных сайтов производителей, или воспользоваться для этого программами типа Pic Bin Editor.

Рис.4. Утилита Pic Bin Editor 2.0.
В тех случаях, когда информация с расширением *.bin представляет собой вспомогательный файл для установки какого-то приложения и находится с ним в одной папке, открывать её не надо.
Данные будут использованы автоматически в процессе загрузки программы или игры. И никаких полезных для пользователя сведений открытие файла не принесёт.
Открытие двоичного видеофайла
В ряде случаев обнаруженный на компьютере файл bin может оказаться двоичным видеофайлом Binary Video File – то есть копией DVD-диска или другого носителя, содержащего видеозаписи.
Он представляет собой одну из разновидностей образа, но идёт в комплекте к данным с расширением .cue и открывается уже не эмуляторами, а с помощью мультимедиа плееров:

Рис.5. Медиа плеер VLC.
Двоичные хранилища данных, не требующие открытия
Информация, представленная в двоичном виде, далеко не всегда требует открытия с помощью каких-либо приложений.
Нередко такие файлы, особенно при наличии у них небольшого размера (например, 5–10 кб), используются только конкретными программами и играми, в процессе установки или использования которых запуск файлов bin происходит автоматически.
Но, если по какой-то причине их содержимое следует посмотреть, выбирают приложения типа WinHex или Resource Hacker.

Рис.6. Приложение WinHex.
Работа со сжатыми файлами в системе MacOS
Кроме бинарных файлов в ОС Windows, можно встретить такое же расширение и в других операционных системах.
Например, на компьютерах под управлением MacOS. Здесь информация, скорее всего, окажется сжатым файлом Macbinary, содержащим поисковый заголовок, данные и ресурсы.
Информация такого типа часто передаётся по электронной почте или хранится в сети, и предназначена только для ПК марки Apple. В
прочем, возможность встретить файлы bin для MacOS в настоящее время невелика – из-за замены этого расширения более популярными вариантами.
Но при необходимости это сделать пользуются приложениями:
- The Unarchiver;
- ZipZag;
- Apple Disk Utility;
- QUALCOMM Eudora;
- StuffIt Deluxe.
Программы для работы с видео-файлами
В формате .bin сохраняют не только образы программ, но и фильмов. Это не совсем привычный формат, и многие впадают в ступор, не зная какой программой открыть скачанное видео. Хотя решение, на самом деле, лежит на поверхности.
VLC media player — одна из наиболее популярных программ для просмотра фильмов, которую используют миллионы людей по всему миру. Она проста в использовании, распространяется совершенно бесплатно, и кроме этого, она имеет широкий функционал. Помимо поддержки основных мультимедийных форматов, VLC может похвастаться возможностью работы с бинарными файлами. Такого функционала нет в большинстве аналогичных плейеров.
Интересно то, что несмотря на свою бесплатность, программа превосходит большинство существующих утилит. Например, VLC переведён на 78 языков, среди которых есть и русский. Также, уникальным является поддержка всех существующих операционных систем, начиная от Windows, заканчивая Linux и Morph.

Если возникли вопросы, задавайте в комментариях, мы обязательно поможем.
Другие варианты
Применяемые на сегодняшний день данные, хранящиеся в файлах bin, могут предназначаться для использования на таких устройствах:
- на смартфонах марки BlackBerry, где данные служат для управления обновлениями операционной системой;
- любых мобильных гаджетов с чипсетом MTK (значительная часть бюджетных китайских смартфонов с ОС Android);
- старых телефонах Nokia, где bin-файл может содержать мелодию рингтона;
- сканерах марки Epson, Acer и Agfa.
Узнать, что файл необходим для работы с соответствующим оборудованием обычно несложно, так как информация располагается в общих папках с предназначенным для этих устройств программным обеспечением.
Открыть их может понадобиться только разработчику, использующему для этой цели специализированные утилиты.
Пользователю ПК этого делать не следует – во-первых, никакой ценной информации он не получит, а, во-вторых, случайно изменённый файл может перестать работать.
Инструкция для клиента
- Распаковать все bin файлы из архива в папку Temp. Т.е. должно получится C:\Temp\SensorSpider\*.bin
- Подключить по USB микроконтроллер.
- Посмотреть какой порт назначился в Windows.
- В команде ниже указать правильный COM порт и путь к файлу
esptool.exe %LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\2.6.1\esptool.exe —chip esp32 —port COM13 —baud 921600 —before default_reset —after hard_reset write_flash -z —flash_mode dio —flash_freq 80m —flash_size detect 0xe000 C:/Temp/ /boot_app0.bin 0x1000 C:/Temp/ /bootloader_dio_80m.bin 0x10000 C:/Temp/ / .ino.bin 0x8000 C:/Temp/ / .ino.partitions.bin > Upload.txt
- Выполнить команду.
- Посмотреть Upload.txt , убедившись, что нет ошибок в путях и команда отработала успешно.
- Переслать файл Upload.txt с результатами заливки разработчику.
Выводы
Обнаруженный файл образа с расширением bin можно открыть с помощью стандартных эмуляторов типа Alcohol или Daemon Tools и даже конвертировать его в более удобный формат.
Существуют и специальные программы, открывающие такую информацию.
Тогда как системные файлы того же типа чаще всего вообще не стоит открывать и, тем более, изменять, оставив эту возможность программистам и разработчикам программного обеспечения.
Петренко Юрий Александрович
Большая часть моей жизни — процесс получения информации, в первую очередь, о современных технологиях. Технологии помогают мне работать, учиться, развлекаться и общаться. Самыми интересными и полезными сведениями я всегда готов поделиться с другими.Мой телеграмм: Yurii Kutsii
Автор: Юрий Белоусов · 13.03.2019
При выполнении какой-либо задачи, пользователь может столкнуться с файлами, имеющими расширение BIN. И возникает вопрос: «Как и чем открыть файл BIN в Windows? Какие программы использовать?».
Открытие Бин-файл на операционной системе Windows 7
В наше время много пользователей еще пользуются предыдущей самой удачной версией этой операционной системы, поэтому стоит знать, что распаковать бин-файл на windows 7 так же просто, как и на Windows 10. В каком-то плане даже проще, ведь для этой операционной системы разработано больше специальных программ, позволяющих решить возникшую проблему. Рассмотрим еще раз список действий. 1. Скачивание нужной программы; 2. Открытие бин-файла в этой программе и распаковка; 3. Работа с распакованными файлами.
Примечание:
если вы на 100% уверены, что в открываемом вами файле находится какое-либо видео, тогда можно не пользоваться сторонними программами. Просто жмете на нем правой кнопкой мыши, выбираете «Открыть с помощью» и в выпадающем списке выберите нужный плеер, нажав на него. После этих действий видео автоматически воспроизведется. Порядок действий показан на следующих скриншотах.

Что нужно знать, чтобы открыть файл с расширением BIN
Итак, что же нужно знать пользователю, чтобы подобрать нужную программу, которой можно открыть файл BIN?
В первую очередь нужно выяснить происхождение данного файла. Откуда он взялся? Вы его скачали или он уже был на компьютере, и вы лишь обнаружили его.
Если файл уже был на компьютере, и вы не знаете, что это за файл и какие функции он выполняет, то не стоит и трогать.
Если же вы знаете скачали этот файл и точно знаете, что он из себя представляет, то проблем с выбором соответствующей программы или приложения и открытием BIN файла быть не должно.
В первую очередь стоит обратиться к сайту, на котором был скачан этот файл. Если это какой-то файлообменник, то наверняка на странице должна быть подробная информация по установке или распаковке файла и указанием того, с помощью какой программы следует выполнить его обработку.
А вообще, файлы с расширением BIN редко используются самостоятельно. Как правило, они идут в комплекте с другими файлами, в частности – с исполняемым файлом, имеющим расширение exe. С помощью которого и выполняется запуск установки какой-либо программы, утилиты, игры и т.д.
Утилиты, используемые для системного администрирования (и другие команды только для root), /sbin содержит двоичные файлы, необходимые для загрузки, восстановления, восстановления и/или восстановления системы в дополнение к двоичным файлам в /bin. Программы, выполняемые после того, как /usr монтируется (когда проблем нет), обычно помещаются в /usr/sbin. Локально установленные программы системного администрирования должны быть помещены в /usr/local/sbin.
Ожидаются:
fastboot, fasthalt, fdisk, fsck, getty, halt, ifconfig, init, mkfs, mkswap, reboot, route, swapon, swapoff, update
Один из способов защиты системы от шаловливых рук юзеров — это запрет запуска этих утилит кому-попало, установкой атрибута x. К тому же, замена /bin и /sbin на копии из архива (одинакового для всех однотипных систем) является быстрым способом починки систем без пакетного менеджера.
Программы для открытия файлов формата BIN
А теперь рассмотрим типы BIN файлов, которые наиболее часто встречаются в повседневной жизни. А также соответствующие программы для открытия файлов формата BIN в Windows 7, 8, 10, XP.
Программы для редактирования BIN
Открыть файлы с расширением BIN для редактирования можно с помощью простого блокнота, программы Notepad++, или – любого другого текстового редактора, которыми открывают обычные текстовые документы. Однако, это не специализированные программы, поэтому могут возникнуть различные сбои и неверное отображение содержимого файла.
Из специализированных программ, для редактирования можно отметить:
Образы DVD и CD дисков
Образы DVD и CD дисков с играми или программами содержат в себе пакет файлов с расширением BIN, но с ними в комплекте также должны быть файлы MDF или ISO. Именно их необходимо запускать.
Программы для открытия образов дисков:
Пример использования образа в программе DAEMON Tools:
Архивы
Если это файл с архивом, то его следует открыть с помощью распаковщиков:
Преобразование файла BIN в ISO
Для преобразования файла BIN в ISO можно использовать программу:
Двоичный видеофайл
В редких случаях BIN файлом может быть двоичный видеофайл – копией с DVD-диска. В таком случае, открыть его можно с помощью любого медиа проигрывателя:
Открытие бин-файла на операционной системе Windows 10
Последние обновления этой операционной системы, которая без преувеличения одна из самых популярных в мире, внесли трудности у некоторых пользователей с извлечением таких файлов, поэтому будет полезно узнать, как выполнить нужные действия, в которых нет ничего сложного: 1. Бин-файл – это чаще всего образ какого-то диска, как файл с форматом .iso, поэтому открыть и распаковать его можно при помощи стандартных программ монтирования образов дисков, таких как UltraIso, Alcohol, DaemonTools или любая другая. 2. После открытия файла, нужно нажать на кнопку распаковки. В каждой программе ее нахождение разное, но принципы работы одинаковые: вы указываете место, куда распаковать файл и жмете кнопку распаковать. Ниже показан пример работы на программе UltraIso

3. Теперь нужно просто открыть папку, в которую вы извлекали нужные файлы и начинать производить нужные вам действия.
Как создать bin файл
Образ диска (image) — компьютерный файл, содержащий в себе полную копию содержимого на диске. Таким образом, образ диска содержит всю информацию, необходимую для дублирования структуры, расположения и содержания данных. Как правило образы используются для записи CD и DVD дисков. Распространено использование образов в качестве виртуальных CD/DVD приводов, если для работы программы или игры требуется присутствие диска. Образ CD/DVD диска можно создать при помощи таких программ как Nero, Alcohol 120%, Daemon Tools и т.п. Но мне больше нравится ImgBurn. Ее мы сегодня и рассмотрим.
Чтобы создать или записать образ CD или DVD диска, воспользуемся бесплатной программой ImgBurn. Сначала необходимо скачать программу по одной из ссылок на странице разработчика. По умолчанию интерфейс программы на английском языке, поэтому на той же странице можно взять русский перевод.
Установка ImgBurn
Запускаем загруженный файл для установки и жмем кнопку «Next».

Выставляем галочку, тем самым соглашаемся с условиями лицензионного соглашения и жмем «Next».

Здесь оставляем настройки как есть и продолжаем установку нажатием кнопки «Next».

На данном этапе необходимо выбрать папку, в которую будет установлена программа. Можно оставить предложенный путь по умолчанию и просто нажать «Next».

По желанию указываем свое название программы для меню «Пуск – Программы», или оставляем как есть и просто жмем «Next».

Начнется процесс копирования файлов, после которого появится следующее окно:

Убираем галочку для Run ImgBurn и жмем кнопку «Finish».
Далее распаковываем файл с русским переводом в папку:
C:\Program Files\ImgBurn\Languages
(или в ту, которую вы указали в процессе установки программы)
Запускаем ImgBurn. Идем в меню «Tools – Settings».

На первой вкладке в области «Language» выбираем «User Specified – русский», и жмем «OK».

Теперь программа на русском языке.

Далее узнаем, как копировать образ диска на жесткий диск и наоборот, как записать образ диска на болванку.
Как создать образ диска
Запустите программу и выберите «Создать образ диска».

В следующем окошке: 1) выберите устройство, в котором содержится диск, с которого необходимо сделать образ (копию); 2) в разделе назначение необходимо указать, куда будет записан образ, а так же формат создаваемого образа (iso, img или bin); 3) нажмите кнопку для начала процесса создания образа.

Процесс создания образа:

По окончании которого будет выведено соответствующее сообщение.

Все, образ создан!
Как записать образ на диск
Запускаем программу и выбираем «Записать образ на диск».

В следующем окошке: 1) указываем образ, который будем записывать на диск; 2) указываем привод с диском; 3) жмем кнопку для начала записи.
How can I create a binary file using Bash?
How can I create a binary file with consequent binary values in Bash?
This is what I wanted:
![]()
4 Answers 4
There’s only one byte you cannot pass as an argument in a Bash command line: 0
For any other value, you can just redirect it. It’s safe.
For the value 0, there’s another way to output it to a file
To append it to file, use
![]()
xxd: creates a hex dump of a given file or standard input. It can also convert a hex dump back to its original binary form.
![]()
If you don’t mind to not use an existing command and want to describe you data in a text file, you can use binmake. That is a C++ program that you can compile and use like following:
First get and compile binmake (the binary will be in bin/ ):