Q117216: File Search User-Defined Function (UDF) Example
Article: Q117216
Product(s): Microsoft FoxPro
Version(s): MS-DOS:2.0,2.5,2.5a,2.5b,2.6; WINDOWS:2.5,2.5a,2.5b,2.6,3.0
Operating System(s):
Keyword(s): kbcode
Last Modified: 10-FEB-2000
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual FoxPro for Windows, version 3.0
- Microsoft FoxPro for MS-DOS, versions 2.0, 2.5, 2.5a, 2.5b, 2.6
- Microsoft FoxPro for Windows, versions 2.5, 2.5a, 2.5b, 2.6
-------------------------------------------------------------------------------
SUMMARY
=======
The FileFind() user-defined function (UDF), shown below, uses the ADIR()
function to locate a file starting from a particular location on the hard disk
drive.
MORE INFORMATION
================
PROCEDURE FILEFIND
PROCEDURE FILEFIND
* WARNING: If the user has a directory structure 32+ levels deep,
* this program will crash.
* This procedure will recursively search a specified directory and
* its subdirectories for a particular file and if found return the
* location from the root directory. If the file is not found, the
* message "FILE NOT FOUND!" will be displayed. Wildcard characters
* are not supported.
* Example of how to call this function is :
* TempVariable=FileFild("Customer.dbf","C:")
PARAMETER FILE, CUR_DIR
filefound = " "
IF RIGHT((cur_dir),1) = "\"
cur_dir=substr(cur_dir,1,len(cur_dir)-1)
ENDIF
=filesrch(file,cur_dir)
IF EMPTY(filefound)
filefound = "FILE NOT FOUND!"
ENDIF
RETURN UPPER(filefound)
FUNCTION FILESRCH
*
* This is the recursive part of the program. This function will
* search the specified directory and call itself again if needed to
* search a subdirectory.
PARAMETER FILENAME, CURDIR
PRIVATE filename, curdir, temp_dir, i, j && Private variables needed
* curdir is the current directory. && for recursion to work.
* filename is the file being searched for.
DIMENSION temp_dir(1,1)
temp_dir(1,1)=" "
=ADIR(temp_dir,curdir+"\"+FILENAME)
IF ASCAN(temp_dir,UPPER(filename)) != 0 && Search current directory
filefound=curdir + "\"+ UPPER(filename)
RETURN TO filefind && IF file found, end program
ENDIF
=ADIR(temp_dir,curdir+"\*.","D") && Get subdirectories
IF temp_dir(1,1) != " " AND filefound =" "&& Search subdirectories
IF temp_dir(1,1)="." && Look at first subdirectory
IF ALEN(temp_dir,1)=2 && Possibly no subdirectories
RETURN
ENDIF
i=3
ELSE
i=1
ENDIF
FOR j = i TO ALEN(temp_dir,1) && Start searching subdirectories
curdir=curdir+"\"+temp_dir(j,1)
=filesrch(filename,curdir) && Recursive call
curdir=SUBSTR(curdir,1,RAT("\",curdir)-1)
ENDFOR
ENDIF
RETURN
Additional query words: VFoxWin FoxDos FoxWin search find locate
======================================================================
Keywords : kbcode
Technology : kbVFPsearch kbAudDeveloper kbFoxproSearch kbZNotKeyword3 kbFoxPro200DOS kbFoxPro250DOS kbFoxPro250aDOS kbFoxPro250bDOS kbFoxPro260DOS kbFoxPro260 kbFoxPro250 kbFoxPro250a kbFoxPro250b kbVFP300
Version : MS-DOS:2.0,2.5,2.5a,2.5b,2.6; WINDOWS:2.5,2.5a,2.5b,2.6,3.0
=============================================================================
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.