list files in a folder

anandknr

Member
Hi All,

I need to populate a temptable with the path of all text files in a folder. Is there any easy way in progress to get the list all the .txt files in a folder.
 

Cringer

ProgressTalk.com Moderator
Staff member
I do this:

Code:
DEFINE VARIABLE lv-FileSequence AS INTEGER NO-UNDO INITIAL 1.
DEFINE VARIABLE lv-FileDir      AS CHARACTER NO-UNDO.
DEFINE VARIABLE lv-Extensions   AS CHARACTER NO-UNDO INITIAL "xls,xlsx,csv".
DEFINE VARIABLE lv-FileName     AS CHARACTER NO-UNDO.
DEFINE VARIABLE lv-PathName     AS CHARACTER NO-UNDO.
DEFINE VARIABLE lv-Type         AS CHARACTER NO-UNDO.
    lv-FileDir = DYNAMIC-FUNCTION('fn-EDI-InputDirectory',"Import Directory",fn-EDI-InitialDir(ICMAS.SupplierDataImport.SupplierDataImportKey)).
    IF lv-FileDir EQ "CANCEL" THEN
      RETURN "CANCEL".
    INPUT STREAM s-import FROM OS-DIR(lv-FileDir).
    REPEAT:
      IMPORT STREAM s-import lv-FileName lv-PathName lv-Type NO-ERROR. 
      IF lv-Type NE "F" THEN 
        NEXT. 
      IF LOOKUP(ENTRY(NUM-ENTRIES(lv-FileName,"."),lv-FileName,"."),lv-Extensions) EQ 0 THEN 
        NEXT. 
      CREATE tt-SupplierFiles.
      ASSIGN 
        tt-SupplierFiles.SFName   = lv-PathName
        tt-SupplierFiles.SFNumber = lv-FileSequence
        lv-FileSequence           = lv-FileSequence + 1.
    END. 
    INPUT STREAM s-import CLOSE.
 

Cringer

ProgressTalk.com Moderator
Staff member
By the way, the

LOOKUP(ENTRY(NUM-ENTRIES(lv-FileName,"."),lv-FileName,"."),lv-Extensions) line is so complicated because our users insist on having file names with multiple dots in them... :/
 
There are lots of ways to do it. Here's a slightly different take.
Code:
  /* Display files  in a directory */
  DEFINE VARIABLE cDir      AS CHARACTER   NO-UNDO.
  DEFINE VARIABLE cFile     AS CHARACTER   NO-UNDO.
  DEFINE VARIABLE cFullName AS CHARACTER   NO-UNDO.
  DEFINE VARIABLE cFlags    AS CHARACTER   NO-UNDO.
  
  ASSIGN cDir = "C:\SomeDir".
  FILE-INFO:FILE-NAME = cDir.
  IF FILE-INFO:FULL-PATHNAME = ? THEN DO:
      MESSAGE "directory not found."
          VIEW-AS ALERT-BOX INFO BUTTONS OK.
      RETURN. /* or however you want to handle this */
  END.
  /* Read the directory */
  INPUT FROM OS-DIR (cDir) NO-ECHO.
  REPEAT:
    IMPORT cFile cFullName cFlags.
    IF INDEX(cFlags,"F") > 0 THEN DO:
        IF SUBSTRING(cFile,R-INDEX(cFile,".")) EQ ".txt"  THEN DO:
            /* Update TT... */
            MESSAGE "Filename:" cFile SKIP 
                    "Full Path:" cFullName SKIP 
                    "Flags:" cFlags SKIP
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
        END.
    END. /* IF INDEX(cFlags,"F") > 0... */
  END. /* REPEAT... */
  INPUT CLOSE.
 
Top