martin2k

Google
 
Web www.martin2k.co.uk

See if Files, Folders and Drives Exist


 

Home

Read and add posts to the Visual Basic 6.0 Forums

Download some of my programs and OCXs

Read the Tips here

The old style forum is still available here

Contact


 

Advanced Tip

These functions will allow to determine whether files, folders and drives exist at runtime.  (Taken from AllenOCX)

Code to see whether a file exists:

Public Function FExists(OrigFile As String)
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
FExists = fs.fileexists(OrigFile)
End Function
'Returns a boolean - True if the file exists

Code to see whether a folder exists:

Public Function DirExists(OrigFile As String)
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
DirExists = fs.folderexists(OrigFile)
End Function
'Returns a boolean - True if the folder exists

Code to check the state of a drive (returns 0 if the drive does not exist, 1 if the drive exists but contains no media, 2 if the drive exists and contains media.  Hard-drives will always return 2):

Public Function DExists(OrigFile As String)
Dim fs, d
Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.driveexists(OrigFile) = True Then
    Set d = fs.getdrive(OrigFile)
    DExists = 1
        If d.isready = True Then
        DExists = 2
        Exit Function
        End If
    Else
    DExists = 0
    End If
End Function


Comments

From: Joe G
Date: Sunday, May 21, 2006 at 03:50:16
Comments: I ran a speed test and the "FileSystemObject" example is about twice as fast as the "If Dir('C:\folder', vbDirectory) = vbNullString" example.

If speed is important use the FileSystemObject!

Joe G.
 
From: Hasan
Date: Thursday, February 2, 2006 at 17:02:47
Comments: Hello,
i just checked your DRIVE EXIST code...
ok now in my vb project how would i call it?

please let me know.

thanx

 
Reply:

You need to copy the whole function into your Visual Basic code and then you can call it from any other procedure e.g.:

Private Sub Command1_Click()
If DExists( "a") = 1 Then MsgBox "The A: drive is not yet ready", vbExclamation, "Check Floppy Drive"
End Sub
 
From: Vinu Lakshman
Date: Monday, July 11, 2005 at 10:37:41
Comments: Hello Martin,
Thanks Martin.
Ure site was really helpful to me.
 
From: Kristlyn
Date: Monday, May 30, 2005 at 05:37:45
Comments: Tnx for this site... It really helped me a lot in doing my work...=) thanks!!!
 
From: yurivish
Date: Tuesday, August 10, 2004 at 23:15:57
Comments: cant you just do if dir(filename) <> "" then it exists??
 
Reply:

You can do it this way.  It is best to include the attributes for hidden and system files as well so that they can also be detected e.g.:

a = Dir("C:\pagefile.sys", vbHidden + vbSystem)
 
From: DaMaster
Date: Thursday, August 5, 2004 at 20:25:27
Comments: jam graty:
Actually you can do a code for this instead where you use statements as:

for each folder in root.subfolders
next

set root as a fso (FileSystemObject) with the folder you want to start searching from. then use a loop-statement to continue searching in subfolders of the subfolders.

in each folder you use following statement:

for each file in folder.files
next

where you dim file, set folder as a FSO with the value of the current folder.

Example: (this example search through a folders subfolders. use a loop-statement to make the code search thorugh upfollowing subfolders)

Set fso = CreateObject("Scripting.FileSystemObject")
Set Root = fso.Getfolder(App.Path)

For Each folder In Root.subfolders

 For Each ffile In folder.Files 'Root2.Files
   If LCase(ffile) = LCase(AWhereto) Then 'FOUND THE ILE
      msgbox "File found!"
      Exit Sub
      End If
  Next

Next

 
From: YUSSRI
Date: Tuesday, August 3, 2004 at 09:29:42
Comments: your web site is so useful and provide an easy ,creative and more practical way
of learning.
so plz keep on
 
From: ranganath <ranganath_prasad_babu>
Date: Tuesday, June 22, 2004 at 07:34:37
Comments: Dear Sir/Madam

 

Ur forums are excellent this will help many people
please continue in the same way

all the best


urs truly
ranganath

 
From: Ted Belben
Date: Saturday, February 14, 2004 at 21:32:50
Comments:

Regerding my previous E-Mail related to your code "See of Files, Folders and Drives Exist" and my question related to creating folders, I think I stumbled on the solution as follows:

Public Sub FoldExists(Folder As String)

' This function checks if required folders exists and if not, will create the folder

Dim MyFileSystem

Set MyFileSystem = CreateObject("Scripting.FileSystemObject")

    If MyFileSystem.FolderExists(Folder) = False Then
       MyFileSystem.CreateFolder (Folder)
    End If

End Sub

I used a Sub rather than a function since the requirement was very simple and not used elsewhere in the code. I just call the sub where needed.

I suggest you publish the solution on your web page for others to use.

Ted

 
Reply:

You can also use this code to see if a folder exists:

If Dir("C:\folder", vbDirectory) = vbNullString Then 'folder doesn't exist

And this code to create a folder:

MkDir "C:\WINDOWS\DESKTOP\A new folder"
 
From: Humulus
Date: Friday, October 17, 2003 at 11:18:05
Comments: I had to check if a drive exists from within a Microsoft Access-database. First hit on Google was this. It works great. Thanks!
 
From: Timothy
Date: Friday, August 1, 2003 at 22:33:24
Comments: Spectacular Code!  Thanks!
 
From: ManojRajan
Date: Thursday, June 26, 2003 at 13:41:52
Comments: Nice One that really worksssssssss.
Thanks Martin for the help
Actually i was in the middle of a module when i required this stuff. Thanks once again.
 
From: jam graty
Date: Thursday, November 21, 2002 at 23:30:07
Comments: please help, i need my program to find a file but in your example i don't know were to put it!
 
Reply: These functions cannot be used to find files, they simply return True or False if a file or folder exists or in the case of the third function, 0, 1 or 2 depending on the state of a specified drive.

You need to use the File Search OCX file to do this - click here.


Please fill in the below form if you have any comments or additional information you want to add about the above information.  If you have any Visual Basic 6.0 questions, please visit the ForumAny questions sent using this form will be ignored.

* - Mandatory

*Name: E-mail:

*Comments:

*Please type the following code (your comment will not be accepted without it):


Martin Allen 1999 - 2006.  Last updated Monday 29 May 2006 06:28:42 PM +0100.