sunilkini
asked on
Create subfolders within folders...
This might be fairly simple..
I need to check and then create subfolders within a folder.
For instance, the path specified to my application is: C:\MyFolder\MyProjects\MyT estApp
\MyTestFile
At each level, I need to check if the folder exists, if it does then proceed checking the next level, else create it. i.e
Check if MyFolder exists.
If yes then check if MyProjects Exists
If no then create MyFolder folder
and so on.
I DO NOT wish to use the FileSystemObject mechanism to accomplish this.
I would really appreciate any help on this.
Thanks.
I need to check and then create subfolders within a folder.
For instance, the path specified to my application is: C:\MyFolder\MyProjects\MyT
\MyTestFile
At each level, I need to check if the folder exists, if it does then proceed checking the next level, else create it. i.e
Check if MyFolder exists.
If yes then check if MyProjects Exists
If no then create MyFolder folder
and so on.
I DO NOT wish to use the FileSystemObject mechanism to accomplish this.
I would really appreciate any help on this.
Thanks.
ASKER
vinnyd79,
Thank you for your response. The code works fine.
I have a question though:-
My application will be receiving several files that will written into the same folder. So once the folder is created, I do not think there is a need to CreateNewDirectory everytime a file is written to Path just created. Is there a way a check can be done if the Path exists before creating one?
Thanks!
Thank you for your response. The code works fine.
I have a question though:-
My application will be receiving several files that will written into the same folder. So once the folder is created, I do not think there is a need to CreateNewDirectory everytime a file is written to Path just created. Is there a way a check can be done if the Path exists before creating one?
Thanks!
ASKER
My concern is the folders can be purged anytime during the day, which might need my code to create the directory. But majority of the times only checking if the directory exists should suffice.
use dir to check if it exists
Private Sub Command1_Click()
If Dir("C:\Folder\Projects\My Test", vbDirectory) <> "" Then
MsgBox "it exists"
Else
MsgBox "it don't exist"
' Then create directory here
End If
End Sub
Private Sub Command1_Click()
If Dir("C:\Folder\Projects\My
MsgBox "it exists"
Else
MsgBox "it don't exist"
' Then create directory here
End If
End Sub
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Just as an alternative, here is a routine that I use to make a nested directory set. It uses
Public Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10&
Public Const FILE_ATTRIBUTE_INVALID As Long = -1& ' = &HFFFFFFFF&
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpfilename As String) As Long
Public Function DirExists(sPathName) As Boolean
Dim attr As Long
attr = GetFileAttributes(sPathNam e)
If (attr = FILE_ATTRIBUTE_INVALID) Then
DirExists = False
Else
DirExists = ((attr And FILE_ATTRIBUTE_DIRECTORY) > 0)
End If
End Function
Public Sub MkDirLong(ByVal sPath As String, Optional IsNetworkPath As Boolean = False)
Dim sBuild As String
Dim I As Integer
I = InStr(sPath, ":")
If I > 0 Then
sBuild = Left(sPath, 2)
sPath = Mid(sPath, 3)
Else
If Not IsNetworkPath Then
sBuild = "C:" ' Default to C drive
Else
sBuild = "" ' Assume Current Drive if NetworkPath and No Drive Specified
End If
End If
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
I = InStr(2, sPath, "\")
Do While I > 0
sBuild = sBuild & Left(sPath, I - 1)
sPath = Mid(sPath, I)
If Not DirExists(sDrive & sBuild) Then
MkDir sBuild
End If
I = InStr(2, sPath, "\")
Loop
End Sub
To use this:
Private Sub MakeStorage()
Dim sFilePath As String
sFilePath = "C:\MyProgram\MyData\20020 716\AM\" ' Sample path
If Not DirExists(sFilePath) Then MkDirLong(sFilePath)
End Sub
Public Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10&
Public Const FILE_ATTRIBUTE_INVALID As Long = -1& ' = &HFFFFFFFF&
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpfilename As String) As Long
Public Function DirExists(sPathName) As Boolean
Dim attr As Long
attr = GetFileAttributes(sPathNam
If (attr = FILE_ATTRIBUTE_INVALID) Then
DirExists = False
Else
DirExists = ((attr And FILE_ATTRIBUTE_DIRECTORY) > 0)
End If
End Function
Public Sub MkDirLong(ByVal sPath As String, Optional IsNetworkPath As Boolean = False)
Dim sBuild As String
Dim I As Integer
I = InStr(sPath, ":")
If I > 0 Then
sBuild = Left(sPath, 2)
sPath = Mid(sPath, 3)
Else
If Not IsNetworkPath Then
sBuild = "C:" ' Default to C drive
Else
sBuild = "" ' Assume Current Drive if NetworkPath and No Drive Specified
End If
End If
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
I = InStr(2, sPath, "\")
Do While I > 0
sBuild = sBuild & Left(sPath, I - 1)
sPath = Mid(sPath, I)
If Not DirExists(sDrive & sBuild) Then
MkDir sBuild
End If
I = InStr(2, sPath, "\")
Loop
End Sub
To use this:
Private Sub MakeStorage()
Dim sFilePath As String
sFilePath = "C:\MyProgram\MyData\20020
If Not DirExists(sFilePath) Then MkDirLong(sFilePath)
End Sub
ASKER
vinnyd79,
Fantastic! Works exactly the way I need it.
Much Thanks!
Fantastic! Works exactly the way I need it.
Much Thanks!
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Public Sub CreateNewDirectory(NewDire
Dim sDirTest As String
Dim SecAttrib As SECURITY_ATTRIBUTES
Dim bSuccess As Boolean
Dim sPath As String
Dim iCounter As Integer
Dim sTempDir As String
iFlag = 0
sPath = NewDirectory
If Right(sPath, Len(sPath)) <> "\" Then
sPath = sPath & "\"
End If
iCounter = 1
Do Until InStr(iCounter, sPath, "\") = 0
iCounter = InStr(iCounter, sPath, "\")
sTempDir = Left(sPath, iCounter)
sDirTest = Dir(sTempDir)
iCounter = iCounter + 1
'create directory
SecAttrib.lpSecurityDescri
SecAttrib.bInheritHandle = False
SecAttrib.nLength = Len(SecAttrib)
bSuccess = CreateDirectory(sTempDir, SecAttrib)
Loop
End Sub
Private Sub Command1_Click()
'call to create a new directory
Call CreateNewDirectory("c:\tes
End Sub