Objeto PathDiretorio
Este sistema permitirá criar todos os diretórios em um caminho absoluto que não existe. Ele não irá substituir existentes diretórios.
Por exemplo, digamos que o servidor da raiz foi :
c: \ meu_servidor
e você queria fazer uma nova sub-diretórios, como:
c: \ meu_servidor \ Minha_pasta \ Pasta2 \ Pasta3
Normalmente você iria invocar o FileSystemObject e usar o código como este:
dim fso
set fso = server.createobject("scripting.filesystemobject")
fso.createfolder("c:\meu_servidor\Minha_pasta")
fso.createfolder("c:\meu_servidor\Minha_pasta\Pasta2")
fso.createfolder("c:\meu_servidor\Minha_pasta\Pasta3")
set fso = nothing
Não seria ótimo se você pudesse automatizar este processo?
Pois agora você pode. Você só entra como um caminho para criar:
c:\ meu_servidor\Minha_pasta\Pasta3
na classe e ele irá criar o diretório string.
sintaxe:
Set object = New PathDiretorio
exemplo:
Class PathDiretorio
Private bGblDisableDirCreation
Public CriarPath
Public Property Get Version()
Version = "2.0x"
End Property
Public Property Get DisableDirCreation()
If Len(bGblDisableDirCreation) = 0 Then
DisableDirCreation = False
Exit Property
End If
DisableDirCreation = bGblDisableDirCreation
End Property
Public Property Let DisableDirCreation(byVal bIn)
bGblDisableDirCreation = bIn
End Property
Public Sub CriarDir()
DetermineAction CriarPath
End Sub
'Classe rotinas internas
Private Sub DetermineAction(byVal sPath)
if len(trim(sPath)) > 0 then
'verificar a propriedade...
If Not DisableDirCreation Then
'se permitido, criar os diretórios
MkDirs sPath
Else
'mostrar o sistema desativado mensagem
Message 8, sPath
End If
end if
End Sub
Private Function TesteDir_RequiredInput(byRef FULLPATH)
If Len(Trim(FULLPATH)) = 0 then
TesteDir_RequiredInput = False
Exit Function
End If
TesteDir_RequiredInput = True
End Function
Private Function TestDir_DriveLetter(byRef FULLPATH)
' Segundo Teste:
Segundo Teste:
' Um caminho tem de ser absoluto e que
' Inclui uma unidade " x: \ "
' Onde "x" é uma letra válida
' A melhor maneira de verificar é a utilização de uma
' Expressão regular
Dim re
set re = New RegExp
with re
.global = true
.ignorecase = true
.pattern = "[A-Z]\:\\"
TestDir_DriveLetter = .test(FULLPATH)
end with
set re = Nothing
End Function
Private Sub TestDir_FixSeparators(byRef FULLPATH)
' Terceiro Teste:
' Certifique-se que o diretório separadores são
' caminho certo, através da fixação incorreta
' Barras ... (Altere "/" para "\")
FULLPATH = Replace(FULLPATH, "/", "\")
End Sub
Private Function TestDir_ExamineDirs(byRef FULLPATH, byRef aryDirs)
'QUARTO Teste :
'Chegou a hora de testar cada um dos nomes de diretório
'A ser criado para assegurar que eles não
'Tem caracteres ilegais.
Dim i, j, re, bTest
aryDirs = Split(FULLPATH, "\")
' Arrays sempre começam em 0, mas no presente
' Caso, o elemento 0 é a letra
' Então ignorá-lo ...
For i = 1 to Ubound(aryDirs)
aryDirs(i) = Trim(aryDirs(i))
For j = 1 to Len(aryDirs(i))
bTest = False
' Teste cada personagem de um nome de diretório
' Expressão regular contra um padrão que
' Especifica todos os caracteres ilegais
set re = New RegExp
with re
.global = true
.ignorecase = true
'expressão regular tem um pouco de atualização
'um pouco mais limpo agora
.pattern = "[\" & chr(34) & _
"\!\@\#\$\%\^\&\*\(\)\=\+\|\[\]" & _
"\{\}\`\'\;\:\<\>\?\/\,]"
bTest = .test(mid(aryDirs(i), j, 1))
end with
set re = Nothing
if bTest Then
Call Message(3, FULLPATH)
TestDir_ExamineDirs = False
Exit Function
end if
Next
'Quinto Teste
'Certifique-se de que um nome de diretório não é
'Mais de 100 caracteres
if Len(aryDirs(i)) > 100 then
Call Message(4, FULLPATH)
TestDir_ExamineDirs = False
Exit Function
end if
Next
TestDir_ExamineDirs = True
End Function
Private Function TestDir_CheckForFiles(byRef FULLPATH, byRef aryDirs)
'Sexto Teste e Final
'É inaceitável criar arquivos usando
'Este sistema verifica o último elemento em
'O array para uma extensão de arquivo separator ( . )
Dim j
If Len(Trim(aryDirs(ubound(aryDirs)))) = 0 then
' Se o último elemento do array é
' Vazio, o usr messed up e colocar o \
' Seguindo o caminho. Isso é mau sintaxe
' Assim vamos removê-lo por redimming o
' Array por isso não irá estragar o programa
' Quando juntamos o array (se você não usa
' Preserve a palavra-chave, os valores no
' Array são perdidas ...)
Redim Preserve aryDirs(ubound(aryDirs) - 1)
End If
If InStr(Trim(aryDirs(ubound(aryDirs))), ".") <> 0 then
j = 0
j = cLng(Len(Right(aryDirs(ubound(aryDirs)), _
Len(aryDirs(ubound(aryDirs))) - _
InStrRev(Trim(aryDirs(ubound(aryDirs))), "."))))
if j > 0 and j < 6 then
Call Message(5, FULLPATH)
TestDir_CheckForFiles = False
Exit Function
end if
End If
' Recriar caminho completo a partir da matriz de
' Diretórios em um caso houve trailing
FULLPATH = Join(aryDirs, "\")
aryDirs = Split(FULLPATH, "\")
If ubound(aryDirs) < 1 Then
' Somente uma letra de unidade foi especificado, e nós
' Não podemos criar a unidade
Call Message(6, FULLPATH)
TestDir_CheckForFiles = False
Exit Function
End If
TestDir_CheckForFiles = True
End Function
Private Sub MkDirs(byVal FULLPATH)
Dim aryDirs
If Not TesteDir_RequiredInput(FULLPATH) Then
Call Message(1, FULLPATH)
Exit Sub
End If
if NOT TestDir_DriveLetter(Left(FULLPATH, 3)) Then
Call Message(2, FULLPATH)
Exit Sub
end if
TestDir_FixSeparators(FULLPATH)
If NOT TestDir_ExamineDirs(FULLPATH, aryDirs) Then Exit Sub
If NOT TestDir_CheckForFiles(FULLPATH, aryDirs) Then Exit Sub
If NOT CriarEstruturaDir(FULLPATH, aryDirs) Then Exit Sub
Call Message(0, FULLPATH)
End Sub
Private Sub Print(byVal toPrint)
Response.Write(toPrint)
End Sub
Private Function CriarEstruturaDir(byRef FULLPATH, byRef aryDirs)
' Loop através de cada nome e diretório
' Construir um caminho para que o diretório com o
' Outros diretórios no array:
' Exemplo:
' Se você digitar:
' C: \ windows \ desktop \ testefolder \ xan
' O sistema irá loop através de 4 vezes
' E criar quatro strings assim :
' c:\windows
' c:\windows\desktop
' c:\windows\desktop\testefolder
' c:\windows\desktop\testefolder\xan
' No final de cada ciclo com sucesso,
' Criado o diretório está guardado em um
' Seqüência variável chamada strBuild
Dim i, strBuild, j, FSO, bTest
For i = 1 to ubound(aryDirs)
strBuild = ""
if i > 0 and i < ubound(aryDirs) + 1 then
for j = 0 to i
strBuild = strBuild & aryDirs(j) & "\"
next
strBuild = trim(strBuild)
if right(strBuild, 1) = "\" then _
strBuild = Left(strBuild, Len(strBuild) - 1)
end if
' Criar uma instância do FSO para criar
' Cada diretório na seqüência strBuild
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
' Se o caminho especificado existe, jogue um
' Erro e informar o cliente
if i = ubound(aryDirs) and FSO.FolderExists(strBuild) then
bTest = true
else
bTest = false
end if
' Se cada caminho do arquivo não existir, faça-o
if NOT FSO.FolderExists(strBuild) then FSO.CreateFolder(strBuild)
Set FSO = Nothing
if bTest Then
Call Message(7, FULLPATH)
CriarEstruturaDir = False
Exit Function
end if
Next
CriarEstruturaDir = True
End Function
Private Sub Message(byVal iErr, byVal FULLPATH)
' Exibindo mensagens que são chamados por
' Vários eventos na classe
if iErr = 0 Then
Print "<H3>" & FULLPATH & " Criado!</H3>"
Print "Este diretório completo foi criado."
else
Print "<H3>" & FULLPATH & " NÃO Criado!</H3>"
Print "O PathDiretorio Objeto v"
Print Version & " devolvido o "
Print "seguinte mensagem de erro:"
select case iErr
case 1
Error_NoPathEntered
case 2
Error_MissingDriveLetter
case 3
Error_BadCharInPath
case 4
Error_PathTooLong
case 5
Error_NoFiles
case 6
Error_NoDrives
case 7
Error_PathDiretorioExists
case 8
Error_PermissionDenied
case 9
Error_BadDriveLetter
case else
Error_Unspecified
end select
end if
End Sub
Private Sub Error_NoPathEntered
%>
<P>
INSCREVER CAMINHO
</P>
<%
End Sub
Private Sub Error_MissingDriveLetter
%>
<P>
Letra do Drive Ausente
</P>
<%
End Sub
Private Sub Error_BadCharInPath
%>
<P>
CARACTER "BAD" NO PATH DO DIRETÓRIO
</P>
<%
End Sub
Private Sub Error_PathTooLong
%>
<P>
UM OU MAIS DIRETÓRIO são MUITO longos
(Máximo 100 caracteres para cada diretório)
</P>
<%
End Sub
Private Sub Error_NoFiles
%>
<P>
VOCÊ NÃO PODE criar arquivos com este sistema
</P>
<%
End Sub
Private Sub Error_NoDrives
%>
<P>
VOCÊ NÃO PODE criar arquivos com este sistema
</P>
<%
End Sub
Private Sub Error_PathDiretorioExists()
%>
<P>
O caminho especificado já existe
</P>
<%
End Sub
Private Sub Error_PermissionDenied()
%>
<P>
O sistema foi DESATIVADO
Pelo administrador. Não haverá DIRETÓRIO
CRIADO PARA VOCÊ HOJE. VEJA O código fonte para
Instruções sobre como ativar este sistema na sua
SERVIDOR!
</P>
<%
End Sub
Private Sub Error_BadDriveLetter()
%>
<P>
A unidade ESPECIFICADA NÃO PODE SER ENCONTRADA!
</P>
<%
End Sub
Private Sub Error_Unspecified()
%>
<P>
ERRO NAO ESPECIFICADO
</P>
<%
End Sub
End Class