閑看的時候發現一個好玩兒的demo,生成壓縮檔案的。
效果
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5SO3cTM3gTM2EDMwEWMhJTYyYzX2UjM0kDMwEzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
代碼
TYPES
:
BEGIN
OF bin_file
,
name
TYPE string
,
size
TYPE
i
,
data
TYPE solix_tab
,
END
OF bin_file
.
DATA
: lv_filename
TYPE string
,
wa_bindata
TYPE bin_file
,
it_bindata
TYPE
STANDARD
TABLE
OF bin_file
,
oref_zip
TYPE
REF
TO cl_abap_zip
,
lv_zip_xstring
TYPE xstring
,
lv_xstring
TYPE xstring
,
lv_path
TYPE string
,
it_filetab
TYPE filetable
,
ret_code
TYPE
i
,
v_usr
TYPE
i
,
v_zip_size
TYPE
i
,
it_zip_bin_data
TYPE
STANDARD
TABLE
OF raw255
,
v_dest_filepath
TYPE string
.
DATA lv_filesize
TYPE
i
.
DATA wa_filetab
LIKE
LINE
OF it_filetab
.
"create object
CREATE OBJECT
oref_zip
.
"upload
cl_gui_frontend_services
=>file_open_dialog
(
EXPORTING
window_title
=
'Select files that you want to ZIP'
multiselection
=
'X'
CHANGING
file_table
= it_filetab
rc
= ret_code
user_action
= v_usr
)
.
LOOP
AT it_filetab
INTO wa_filetab
.
lv_filename
= wa_filetab
-filename
.
cl_gui_frontend_services
=>gui_upload
(
EXPORTING
filename
= lv_filename
filetype
=
'BIN'
IMPORTING
filelength
= wa_bindata
-
size
CHANGING
data_tab
= wa_bindata
-
data
)
.
CALL
FUNCTION
'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name
= lv_filename
IMPORTING
stripped_name
= wa_bindata
-name
EXCEPTIONS
x_error
=
1
OTHERS
=
2
.
APPEND wa_bindata
TO it_bindata
.
ENDLOOP
.
LOOP
AT it_bindata
INTO wa_bindata
.
CALL
FUNCTION
'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length
= wa_bindata
-
size
IMPORTING
buffer
= lv_xstring
TABLES
binary_tab
= wa_bindata
-
data
.
oref_zip
->
add
( name
= wa_bindata
-name
content
= lv_xstring
)
.
ENDLOOP
.
lv_zip_xstring
= oref_zip
->save
(
)
.
CALL
FUNCTION
'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer
= lv_zip_xstring
IMPORTING
output_length
= v_zip_size
TABLES
binary_tab
= it_zip_bin_data
.
cl_gui_frontend_services
=>file_save_dialog
(
EXPORTING
window_title
=
'SELECT THE LOCATION TO SAVE THE FILE'
file_filter
=
'(*.ZIP)|*.ZIP|'
CHANGING
filename
= lv_filename
path
= lv_path
fullpath
= v_dest_filepath
)
.
cl_gui_frontend_services
=>gui_download
(
EXPORTING
bin_filesize
= v_zip_size
filename
= v_dest_filepath
filetype
=
'BIN'
IMPORTING
filelength
= lv_filesize