FILES - QB64 Wiki

FILES

From QB64 Wiki

Jump to: navigation, search

The FILES statement is used to return a list of files in the current directory using a filespec, but long lists will scroll the screen.


Syntax:

FILES [fileSpec$]


Description:

  • Filespec is a string expression or variable containing a path when required.
  • Filespec can use the * and ? wildcard specs like normal DOS DIR statements.
* denotes one or more wildcard characters in a filename or path spec as any legal file name character(s).
 ? denotes one wildcard letter in a filename or path spec as any legal filename character.
  • If fileSpec$ is omitted, it is assumed to be "*.*" (all files and folders in the current directory).
  • Illegal filename characters in QB64 include * > < : " | \ / with any amount of dot extensions being allowed in Windows.
  • Illegal filename characters in Qbasic include * ? , > < ; : " | \ / + [ ] and more than one dot extension in DOS.
  • FILES lists can make the screen roll. Try using SHELL "DIR" with the /P option. DIR command.


Example 1: Finding a list of all BAS files in the current folder.

FILES "*.BAS"

Screenshot shows only the end of a long list of files


Example 2: A function that verifies that a file exists if it is NOT empty. Note: Function WILL deleted empty files!

INPUT "Enter a file name: ", file$ IF Exist%(file$) THEN OPEN file$ FOR INPUT AS #1: found% = -1 'function call demo CLOSE #1 IF found% THEN PRINT "File exists!" ELSE PRINT "File not found!" END FUNCTION Exist% (filename$) f% = FREEFILE OPEN filename$ FOR APPEND AS #f% IF LOF(f%) THEN Exist% = -1 ELSE Exist% = 0: CLOSE #f%: KILL filename$ 'delete empty files CLOSE #f% END FUNCTION

Code by Ted Weissgerber


Example 3: The DIR$ function used in PDS(7.1) returns a filename or a list when more than one exist. The file spec can use a path and/or wildcards.

FOR i = 1 TO 2 PRINT LINE INPUT "Enter a file spec: ", spec$ file$ = DIR$(spec$) 'use a file spec ONCE to find the last file name listed PRINT DIRCount%, file$, 'function can return the file count using SHARED variable IF DIRCount% > 1 THEN DO K$ = INPUT$(1) file$ = DIR$("") 'use an empty string parameter to return a list of files! PRINT file$, LOOP UNTIL LEN(file$) = 0 'file list ends with an empty string END IF NEXT END FUNCTION DIR$ (spec$) CONST TmpFile$ = "DIR$INF0.INF", ListMAX% = 500 'change maximum to suit your needs SHARED DIRCount% 'returns file count if desired STATIC Ready%, Index%, DirList$() IF NOT Ready% THEN REDIM DirList$(ListMAX%): Ready% = -1 'DIM array first use IF spec$ > "" THEN 'get file names when a spec is given SHELL _HIDE "DIR " + spec$ + " /b > " + TmpFile$ Index% = 0: DirList$(Index%) = "": ff% = FREEFILE OPEN TmpFile$ FOR APPEND AS #ff% size& = LOF(ff%) CLOSE #ff% IF size& = 0 THEN KILL TmpFile$: EXIT FUNCTION OPEN TmpFile$ FOR INPUT AS #ff% DO WHILE NOT EOF(ff%) AND Index% < ListMAX% Index% = Index% + 1 LINE INPUT #ff%, DirList$(Index%) LOOP DIRCount% = Index% 'SHARED variable can return the file count CLOSE #ff% KILL TmpFile$ ELSE IF Index% > 0 THEN Index% = Index% - 1 'no spec sends next file name END IF DIR$ = DirList$(Index%) END FUNCTION

Code by Ted Weissgerber
Explanation: The function will verify that a file exists (even if it is empty) by returning it's name or it returns an empty string if no file exists. It can return a list of file names by using an empty string parameter("") after sending a wildcard spec to get the first file name. The number of file names found is returned by using the SHARED variable, DIRCount%. Unlike the PDS DIR$ function, it MUST use an empty string parameter until QB64 supports optional parameters! The function does NOT delete empty files.


Alternative File List Solution

A member created a FILELIST$ (function) that uses the mouse and does not affect your program screens. It can verify that a file name exists or display a list of long and short file names to choose from. It also avoids program errors when a file name does not exist.

NEW expanded code is available here: FILELIST$
FILELIST$ function Screenshot


See Library: File Exist C++ Function that does not create a temp file. FileExist Function

See also:



Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page
Views
Personal tools