Verzeichnis lesen, Dateien löschen im Pfad

In diesem Report werden Methoden der Klasse CL_GUI_FRONTEND_SERVICES eingesetzt.

  1. 1.Verzeichnis lesen
  2. 2.Unterverzeichnisse lesen
  3. 3.Dateien der Unterverzeichnisse löschen
  4. 4.Verzeichnisse löschen

Verzeichnisse lassen sich nicht löschen, wenn sie nicht leer sind. Dazu müssen wir also zuerst einmal alle Dateien in den Unterverzeichnissen löschen um dann anschließend auch das jeweilige Verzeichnis löschen zu können.


REPORT  ZFI_BILD_STAPEL_DEL.

TABLES: ZFI_CHKBEL, /PSIIC/CAPT, /PSIIC/HEAD.

DATA: FNAME               LIKE EPSF-EPSDIRNAM,
      LT_DIR_LIST         TYPE STANDARD TABLE OF FILE_INFO,
      WA_DIR_LIST         TYPE FILE_INFO,
      LT_UDIR_LIST        TYPE STANDARD TABLE OF FILE_INFO,
      WA_UDIR_LIST        TYPE FILE_INFO,
      IV_DIR_NAME         TYPE STRING,
      IV_UDIR_NAME        TYPE STRING,
      LV_DIR_NAME         TYPE STRING,
      LV_UDIR_NAME        TYPE STRING,
      LV_COUNT            TYPE I,
      LV_TEXT             TYPE STRING.

DATA : RC TYPE I.

DATA: WA_ZFI_CHKBEL TYPE ZFI_CHKBEL,
      LV_BLNUM      TYPE ZFI_CHKBEL-BLNUM,
      LV_DOIT       TYPE C VALUE .

SELECTION-SCREEN BEGIN OF BLOCK MAIN WITH FRAME TITLE TEXT001.
PARAMETERS:     SPOOL_ID  LIKE EPSF-EPSDIRNAM.
SELECT-OPTIONS  P_BUDAT   FOR ZFI_CHKBEL-BUDAT.
PARAMETERS:     TESTRUN   LIKE RFPDO-RFBICHCK DEFAULT ‚X‘.
SELECTION-SCREEN END OF BLOCK MAIN.

MOVE SPOOL_ID TO IV_DIR_NAME.

PERFORM READ_FILE.

*&———————————————————————*
*&      Form  READ_FILE
*&———————————————————————*
*       text
*———————————————————————-*
FORM READ_FILE.

*   Erst mal in das Verzeichnis schauen, welche Dateien und Unterverzeichnisse vorhanden sind
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES
    EXPORTING
      DIRECTORY                   = IV_DIR_NAME
    CHANGING
      FILE_TABLE                  = LT_DIR_LIST
      COUNT                       = LV_COUNT
    EXCEPTIONS
      CNTL_ERROR                  = 1
      DIRECTORY_LIST_FILES_FAILED = 2
      WRONG_PARAMETER             = 3
      ERROR_NO_GUI                = 4
      NOT_SUPPORTED_BY_GUI        = 5.

  IF SY-SUBRC 0.
    CASE SY-SUBRC.
      WHEN ‚1‘.
        LV_TEXT = ‚CNTL_ERROR‘.
      WHEN ‚2‘.
        LV_TEXT = ‚DIRECTORY_LIST_FILES_FAILED‘.
      WHEN ‚3‘.
        LV_TEXT = ‚WRONG_PARAMETER‘.
      WHEN ‚4‘.
        LV_TEXT = ‚ERROR_NO_GUI‘.
      WHEN ‚5‘.
        LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
    ENDCASE.
    WRITE: / LV_TEXT.
  ENDIF.

* So, nun arbeiten wir die Verzeichnissliste mal ab.

  LOOP AT LT_DIR_LIST INTO WA_DIR_LIST.
(hier folgt nun eine Verarbeitung für diesen speziellen Fall, da die Verzeichnisnamen gleichlautend der Belegnummern sind. Z.B. Verzeichnisname 61476 ist gleich Belegnummer 61476) Das soll aber nur ein Beispiel einer Verarbeitung darstellen.
* Jetzt sehen wir mal nach, welche Belege bereits gebucht sind. Die dazu gehörenden Dateien können dann aus dem
* Filesystem entfernt werden.
    PERFORM CHECK_IC_BELEG.
    CHECK TESTRUN = .
* Gibt’s was zu tun? Dann los.
    CHECK LV_DOIT = ‚X‘.

    CLEAR LV_DIR_NAME.
    CONCATENATE IV_DIR_NAME WA_DIR_LIST-FILENAME INTO LV_DIR_NAME.
*    Verzeichnisse lassen sich nur löschen, wenn sie leer sind. Deshalb
*    erzeugen wir eine Liste des Unterverzeichnises ->
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES
      EXPORTING
        DIRECTORY                   = LV_DIR_NAME
      CHANGING
        FILE_TABLE                  = LT_UDIR_LIST
        COUNT                       = LV_COUNT
      EXCEPTIONS
        CNTL_ERROR                  = 1
        DIRECTORY_LIST_FILES_FAILED = 2
        WRONG_PARAMETER             = 3
        ERROR_NO_GUI                = 4
        NOT_SUPPORTED_BY_GUI        = 5.

    IF SY-SUBRC 0.
      CASE SY-SUBRC.
        WHEN ‚1‘.
          LV_TEXT = ‚CNTL_ERROR‘.
        WHEN ‚2‘.
          LV_TEXT = ‚DIRECTORY_LIST_FILES_FAILED‘.
        WHEN ‚3‘.
          LV_TEXT = ‚WRONG_PARAMETER‘.
        WHEN ‚4‘.
          LV_TEXT = ‚ERROR_NO_GUI‘.
        WHEN ‚5‘.
          LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
      ENDCASE.
      WRITE: / LV_TEXT.
    ENDIF.
* -> und löschen die Dateien im Unterordner.
    LOOP AT LT_UDIR_LIST INTO WA_UDIR_LIST.
      CONCATENATE LV_DIR_NAME ‚_WA_UDIR_LISTFILENAME INTO LV_UDIR_NAME.
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
        EXPORTING
          FILENAME             = LV_UDIR_NAME
        CHANGING
          RC                   = RC
        EXCEPTIONS
          FILE_DELETE_FAILED   = 1
          CNTL_ERROR           = 2
          ERROR_NO_GUI         = 3
          FILE_NOT_FOUND       = 4
          ACCESS_DENIED        = 5
          UNKNOWN_ERROR        = 6
          NOT_SUPPORTED_BY_GUI = 7
          WRONG_PARAMETER      = 8.

      IF SYSUBRC 0.
        CASE SYSUBRC.
          WHEN ‚1‘.
            LV_TEXT = ‚FILE_DELETE_FAILED‘.
          WHEN ‚2‘.
            LV_TEXT = ‚CNTL_ERROR‘.
          WHEN ‚3‘.
            LV_TEXT = ‚ERROR_NO_GUI‘.
          WHEN ‚4‘.
            LV_TEXT = ‚FILE_NOT_FOUND‘.
          WHEN ‚5‘.
            LV_TEXT = ‚ACCESS_DENIED‘.
          WHEN ‚6‘.
            LV_TEXT = ‚UNKNOWN_ERROR‘.
          WHEN ‚7‘.
            LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
          WHEN ‚8‘.
            LV_TEXT = ‚WRONG_PARAMETER‘.
        ENDCASE.
        WRITE: / LV_TEXT.
      ENDIF.

      IF SYSUBRC = 0.
        CLEAR LV_TEXT.
        CONCATENATE ‚- Die Datei ‚ LV_UDIR_NAME ‚wurde gelöscht.‘
                    INTO LV_TEXT SEPARATED BY SPACE.
        WRITE: / LV_TEXT.
      ENDIF.
    ENDLOOP.

*    Wenn das Unterverzeichnis leer ist, dann kann auch der übergeordnete Ordner gelöscht werden.

    CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_DELETE
      EXPORTING
        DIRECTORY               = LV_DIR_NAME
      CHANGING
        RC                      = RC
      EXCEPTIONS
        DIRECTORY_DELETE_FAILED = 1
        CNTL_ERROR              = 2
        ERROR_NO_GUI            = 3
        PATH_NOT_FOUND          = 4
        DIRECTORY_ACCESS_DENIED = 5
        UNKNOWN_ERROR           = 6
        NOT_SUPPORTED_BY_GUI    = 7
        WRONG_PARAMETER         = 8.

    IF SYSUBRC 0.
      CASE SYSUBRC.
        WHEN ‚1‘.
          LV_TEXT = ‚DIRECTORY_DELETE_FAILED‘.
        WHEN ‚2‘.
          LV_TEXT = ‚CNTL_ERROR‘.
        WHEN ‚3‘.
          LV_TEXT = ‚ERROR_NO_GUI‘.
        WHEN ‚4‘.
          LV_TEXT = ‚PATH_NOT_FOUND‘.
        WHEN ‚5‘.
          LV_TEXT = ‚DIRECTORY_ACCESS_DENIED‘.
        WHEN ‚6‘.
          LV_TEXT = ‚UNKNOWN_ERROR‘.
        WHEN ‚7‘.
          LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
        WHEN ‚8‘.           LV_TEXT
= ‚WRONG_PARAMETER‘.      
ENDCASE.      
WRITE: / LV_TEXT.    
ENDIF.    
IF SYSUBRC = 0.      
CLEAR LV_TEXT.      
CONCATENATE ‚Das Verzeichnis ‚ LV_DIR_NAME ‚wurde gelöscht‘                  
INTO LV_TEXT SEPARATED BY SPACE.      
WRITE: / LV_TEXT.    
ENDIF.  

ENDLOOP.

ENDFORM.                    „READ_FILE

*&———————————————————————*
*&      Form  check_IC_Beleg
*&———————————————————————*
*       text
*———————————————————————-*
FORM CHECK_IC_BELEG.
* Suche den IC-Beleg zum Bildstapel
* Wenn dieser bereits gebucht wurde, dann machen wir es so!  

CLEAR LV_DOIT.  

IF WA_DIR_LISTFILENAME CO ‚0123456789 ‚.    
UNPACK WA_DIR_LISTFILENAME TO LV_BLNUM.    
SELECT SINGLE * INTO CORRESPONDING FIELDS OF WA_ZFI_CHKBEL      
FROM /PSIIC/CAPT      
WHERE BLNUM = LV_BLNUM.“ AND
*      INP_OBJTYPE = ‚PSIIC/HDR‘.    

SELECT SINGLE * INTO CORRESPONDING FIELDS OF WA_ZFI_CHKBEL      
FROM /PSIIC/HEAD      
WHERE BLNUM = WA_ZFI_CHKBELINP_OBJKEY.    
IF SYSUBRC = 0.      
IF WA_ZFI_CHKBELPSTAT = ‚POSTED‘.        
IF TESTRUN = ‚X‘.          
CLEAR LV_TEXT.          
CONCATENATE ‚Das Verzeichnis ‚ WA_DIR_LISTFILENAME ‚ kann gelöscht werden‘                      
INTO LV_TEXT SEPARATED BY SPACE.          
WRITE: / LV_TEXT.        
ENDIF.         LV_DOIT
= ‚X‘.      
ENDIF.    
ENDIF.  
ENDIF.

*  WA_DIR_LIST-FILENAME
ENDFORM.                    „check_IC_Beleg_

Dieser Eintrag wurde veröffentlicht in SAP/ABAP von . Setze ein Lesezeichen zum Permalink.

Schreibe einen Kommentar