Code: Alles auswählen.
DATA: ld_text TYPE string.
DATA: lr_catch TYPE REF TO cx_hcs_directory_access_error.
TRY.
CALL METHOD cl_hcs_directory_access=>directory_exists
EXPORTING
i_name = pp_filepath
RECEIVING
r_exists = lv_r_exists.
CATCH cx_hcs_directory_access_error INTO lr_catch.
ld_text = lr_catch->get_text( ).
ENDTRY.
jocoder hat geschrieben: ↑02.04.2020 14:17Das mit dem Aufruf get_longtext() oder get_text() hat nichts mit der Fehlerursache zu tun.
Der Fehler hat vermutlich eher damit zu tun, dass die C-Funktion C_DIR_READ_FINISHED nicht ordnungsgemäß abgeschlossen wurde. Was liefert denn ein Breakpoint vor der C-Funktion C_DIR_READ_START (Variablen l_errno, l_errmsg)?
Code: Alles auswählen.
...
CATCH cx_hcs_directory_access_error INTO l_exception.
IF l_exception->textid <> cx_hcs_directory_access_error=>directory_could_not_be_read.
RAISE EXCEPTION TYPE cx_hcs_directory_access_error
EXPORTING
previous = l_exception
directoryname = i_name.
ENDIF
...
Code: Alles auswählen.
...
when 2 or " Cannot use that pattern.
3 or " Internal error.
4. " Last dir scan has not be finished.
l_subrc = sy-subrc.
raise exception type cx_hcs_directory_access_error
exporting
textid = cx_hcs_directory_access_error=>internal_error
internalerror = l_subrc
errno = l_errno
errmsg = l_errmsg.
..
* oder bei :
call 'C_DIR_READ_NEXT' id 'TYPE' field l_type "#EC CI_CCALL
id 'NAME' field l_name
id 'LEN' field l_len
* ID 'OWNER' FIELD l_owner
id 'MTIME' field l_mtime
* ID 'MODE' FIELD l_mode
id 'ERRNO' field l_errno
id 'ERRMSG' field l_errmsg.
case sy-subrc.
when 1. " No more slots available.
exit.
when 3. " Internal error.
l_subrc = sy-subrc + 10.
raise exception type cx_hcs_directory_access_error
exporting
textid = cx_hcs_directory_access_error=>internal_error
internalerror = l_subrc
errno = l_errno
errmsg = l_errmsg.
...