FUNCTION zcb_usfc_copy_file.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(IM_SOURCE_FILE) TYPE EPSFILNAM
*" REFERENCE(IM_SOURCE_DIRECTORY) TYPE EPSDIRNAM
*" REFERENCE(IM_TARGET_FILE) TYPE EPSFILNAM
*" REFERENCE(IM_TARGET_DIRECTORY) TYPE EPSDIRNAM
*" EXCEPTIONS
*" OPEN_INPUT_FILE_FAILED
*" OPEN_OUTPUT_FILE_FAILED
*" READ_BLOCK_FAILED
*" WRITE_BLOCK_FAILED
*"----------------------------------------------------------------------
DATA lv_source_file_path TYPE string.
DATA lv_target_file_path TYPE string.
DATA lv_eof_reached TYPE c.
DATA lv_buffer(20480).
DATA lv_buflen TYPE i.
CLEAR lv_source_file_path.
CONCATENATE im_source_directory im_source_file INTO lv_source_file_path.
CONDENSE lv_source_file_path NO-GAPS.
CLEAR lv_target_file_path.
CONCATENATE im_target_directory im_target_file INTO lv_target_file_path.
CONDENSE lv_target_file_path NO-GAPS.
* open source and target files and start copying
OPEN DATASET lv_source_file_path FOR INPUT IN BINARY MODE.
IF sy-subrc NE 0.
RAISE open_input_file_failed.
ENDIF.
OPEN DATASET lv_target_file_path FOR OUTPUT IN BINARY MODE.
IF sy-subrc NE 0.
RAISE open_output_file_failed.
ENDIF.
CLEAR lv_eof_reached.
DO.
CLEAR lv_buffer.
READ DATASET lv_source_file_path
INTO lv_buffer LENGTH lv_buflen.
IF sy-subrc = 4.
lv_eof_reached = 'X'.
ELSEIF sy-subrc > 4.
RAISE read_block_failed.
ENDIF.
TRANSFER lv_buffer TO lv_target_file_path
LENGTH lv_buflen.
IF sy-subrc NE 0.
RAISE write_block_failed.
ENDIF.
IF lv_eof_reached = 'X'.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET lv_source_file_path.
CLOSE DATASET lv_target_file_path.
ENDFUNCTION.
Utilidades
Página principal