#REDIRECT [[OPEN#File_Access_Modes]]

[[BINARY]] is used in an [[OPEN]] statement to work with the file or port device manipulating its bytes directly. 


{{PageSyntax}}
:[[OPEN]] {{Parameter|fileName$}} [[FOR]] [[BINARY]] [[AS]] {{Parameter|#fileNumber%}}


{{PageDescription}}
* [[OPEN]] FOR BINARY creates the file if the {{Parameter|fileName$}} does not exist.
* {{Parameter|fileName$}} is the name of the file to open, but could also configure a port.
* {{Parameter|#fileNumber%}} is the number that will represent the file when performing file operations.
* BINARY files use [[GET|GET #]] and [[PUT|PUT #]] to read or write the file at any byte position.
* In '''version 1.000 and up''' you can use [[LINE INPUT]] in [[BINARY]] mode for faster access to text file data.
* QBasic's [[BSAVE]] or BINARY save files can be read using BINARY mode.
* BINARY mode ignores any [[LEN]] = recordlength statement in the [[OPEN]] statement.
* Ports can also be opened in [[BINARY]] mode. See: [[OPEN COM]]


{{PageExamples}}
''Example 1:'' Shows how a PUT variable value is converted to an [[ASCII]] string [[_MK$]] format in a BINARY file.
{{CodeStart}} '' ''
{{Cl|DIM}} int64 {{Cl|AS}} {{Cl|_INTEGER64}}
{{Cl|DIM}} byte8 {{Cl|AS}} {{Cl|STRING}} * 8
int64 = 12345678
{{Cl|PRINT}} int64

{{Cl|OPEN}} "temp64.tmp" {{Cl|FOR...NEXT|FOR}} {{Cl|BINARY}} {{Cl|AS}} #1
{{Cl|PUT}} #1, , int64                 'the file size will be 8 bytes
{{Cl|CLOSE}}

{{Cl|PRINT}} "Press a key to read the file!"
K$ = {{Cl|INPUT$}}(1)

{{Cl|OPEN}} "temp64.tmp" {{Cl|FOR...NEXT|FOR}} {{Cl|BINARY}} {{Cl|AS}} #1
{{Cl|GET}} #1, , byte8                'GET the value as a string
{{Cl|PRINT}} "text string: "; byte8   'show that string is in {{Cl|_MK$}} format

{{Cl|PRINT}} {{Cl|_CV}}({{Cl|_INTEGER64}}, byte8)   'convert to numerical value
{{Cl|CLOSE}} '' ''
{{CodeEnd}}
: ''Note:'' The numerical value does not need to be converted if the file is read using the same numerical variable type as written.


''Example 2:'' A binary file viewer that can view integer values. The type of value can be changed at [[DIM]].
{{CodeStart}} '' ''
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(1000, 600, 256)
{{Cl|_SCREENMOVE}} {{Cl|_SCREENMOVE|_MIDDLE}}
{{Cl|DIM}} value AS {{Cl|INTEGER}}    'value type can be changed
{{Cl|LINE INPUT}} ; "Enter a {{Cl|BINARY}} filename to open: ", file$
{{Cl|PRINT}} " Press S to restart!"

{{Cl|IF...THEN|IF}} {{Cl|LEN}}(file$) {{Cl|THEN}} {{Cl|OPEN}} file$ {{Cl|FOR...NEXT|FOR}} {{Cl|BINARY}} {{Cl|AS}} #1 {{Cl|ELSE}} {{Cl|END}}
{{Cl|IF...THEN|IF}} {{Cl|LOF}}(1) = 0 {{Cl|THEN}} {{Cl|PRINT}} "Empty file!": {{Cl|END}}
DO
  {{Cl|FOR...NEXT|FOR}} i = 1 {{Cl|TO}} 16
    x = x + 1
    {{Cl|GET}} #1, , value
    {{Cl|IF...THEN|IF}} {{Cl|EOF}}(1) {{Cl|THEN}} {{Cl|EXIT DO}}
    {{Cl|PRINT}} value;
  {{Cl|NEXT}}
  {{Cl|PRINT}} {{Cl|CHR$}}(27); x; "@"; row
  K$ = {{Cl|INPUT$}}(1)
  {{Cl|IF...THEN|IF}} {{Cl|UCASE$}}(K$) = "S" {{Cl|THEN}} {{Cl|CLS}}: x = 0: row = 0: {{Cl|PRINT}} "Restarted!": {{Cl|SEEK}} 1, 1
  {{Cl|IF...THEN|IF}} x = 256 {{Cl|THEN}} x = 0: row = row + 1: {{Cl|PRINT}}
{{Cl|LOOP}} {{Cl|UNTIL}} K$ = {{Cl|CHR$}}(27)
{{Cl|CLOSE}} #1
{{Cl|PRINT}} "Press Escape to exit!"
DO: {{Cl|_LIMIT}} 100
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}(27)
{{Cl|SYSTEM}} '' ''
{{CodeEnd}}


{{PageSeeAlso}}
* [[OPEN]], [[CLOSE]]
* [[GET]], [[PUT]], [[LINE INPUT]]
* [[SEEK]] (function), [[SEEK (statement)]]
* [[INPUT (file mode)]], [[RANDOM]], [[APPEND]], [[OUTPUT]]
* [[Bitmaps]], [[Binary]] (numbers)


{{PageNavigation}}
