Variante 1 (xstring)
* Dateiinhalt (Binärdatenstrom) als xstring
DATA: lv_bytes_xstr TYPE xstring.
* Pfad + Dateiname auf dem Appl.-Server
DATA(lv_file) = '/usr/sap/tmp/file.bin'.
TRY.
* Datei zum binären Lesen öffnen
OPEN DATASET lv_file FOR INPUT IN BINARY MODE.
IF sy-subrc = 0.
* Daten bis Dateiende lesen
READ DATASET lv_file INTO lv_bytes_xstr.
IF sy-subrc = 0.
WRITE: / xstrlen( lv_bytes_xstr ), 'bytes gelesen.'.
ELSE.
WRITE: / 'Fehler beim Lesen.'.
ENDIF.
* Datei schließen
CLOSE DATASET lv_file.
ELSE.
WRITE: / 'Konnte Datei nicht öffnen:', lv_file.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.
Variante 2 (byteweises Lesen in itab)
DATA: lv_byte TYPE x LENGTH 1. " ein byte
DATA: it_file TYPE STANDARD TABLE OF x. " iTab mit Dateidaten
* Pfad + Dateiname auf dem Appl.-Server
DATA(lv_file) = '/usr/sap/tmp/file.bin'.
TRY.
* Datei zum binären Lesen öffnen
OPEN DATASET lv_file FOR INPUT IN BINARY MODE.
IF sy-subrc = 0.
* Daten bis Dateiende lesen
DO.
* byteweise lesen
READ DATASET lv_file INTO lv_byte.
IF sy-subrc = 0.
* bytes an iTab anhängen, iTab kann anderweitig heruntergeladen werden
* z.B. mit cl_gui_frontend_services=>gui_download
APPEND lv_byte TO it_file.
ELSE.
EXIT.
ENDIF.
ENDDO.
* Datei schließen
CLOSE DATASET lv_file.
ELSE.
WRITE: / 'Konnte Datei nicht öffnen:', lv_file.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.