[ABAP] Datei vom Applikationsserver binär lesen

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.