FileSystemObject FileExists funciona em um computador, mas não em outro
-
21-12-2019 - |
Pergunta
Em 2010 do Excel VBA, eu estou usando a propriedade FileExists do FileSystemObject para verificar se um arquivo existe.No meu computador ele funciona muito bem.Mas em outro Excel 2010 computador, ele informa que o arquivo não estiver lá, quando na verdade vemos no Explorador do Windows que o arquivo está lá.Em ambos os casos, o arquivo a ser verificado é a unidade de disco rígido local.
Estou verificando o arquivo logo após usar o Shell para descompactar o arquivo.Eu uso DoEvents após o descompacte.O arquivo está sendo extraído para a mesma pasta que o arquivo zip está.
Aqui está o código:
Dim oShell As Object, oZippedFile As Object, oUnzipTargetFolder As Object
Dim FSO As Object, oFile As Object, oFolder As Object
Dim strZipfileFullpath As Variant, strTargetFolderpath As Variant, strTargetFullpath As Variant 'NOT AS STRINGS!! (Shell error if strings)
Dim bFileCheckFsoFileExist As Boolean
Set oShell = CreateObject("shell.application")
Set FSO = CreateObject("scripting.filesystemobject")
strZipfileFullpath = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", MultiSelect:=False)
Set oFile = FSO.GetFile(strZipfileFullpath)
Set oFolder = oFile.ParentFolder
strTargetFolderpath = oFolder.Path & Application.PathSeparator
strTargetFullpath = strTargetFolderpath & oShell.Namespace(strZipfileFullpath).Items.Item(0).Name
oShell.Namespace(strTargetFolderpath).CopyHere oShell.Namespace(strZipfileFullpath).Items.Item(0) 'this zip has only one file.
DoEvents
bFileCheckFsoFileExist = FSO.FileExists(strTargetFullpath)
Alguma idéia de por que isso funciona bem em um computador, mas em outro computador reporta que o arquivo não está aí, mesmo que nós vemos que claramente é?
ATUALIZAÇÃO:
Eu pensei que eu iria adicionar esta nota no caso, pode ser útil para os outros em execução no mesmo obstáculo.
O básico subjacente problema foi que quando usando o Shell para extrair um arquivo zipado, a propriedade de Nome de arquivo zipado objeto não inclui a extensão Se o Windows Explorer está escondendo e as extensões de arquivo tem uma extensão registrado.Por exemplo:
Dim strGofnZipfileFullpath As Variant
Dim oShell As Object, oShellZipfile As Object, oShellZippedFileInZipfile As Object
Dim strShellZippedFileInZipfileFilename As Variant 'NOT AS STRINGS!! (Shell error if strings)
strGofnZipfileFullpath = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", MultiSelect:=False)
Set oShell = CreateObject("shell.application")
Set oShellZipfile = oShell.Namespace(strGofnZipfileFullpath)
Set oShellZippedFileInZipfile = oShellZipfile.Items.Item(0) 'assumes only 1 file in zip.
strShellZippedFileInZipfileFilename = oShellZippedFileInZipfile.Name
Se o Windows Explorer está definido para ocultar as extensões e o arquivo zipado tem uma extensão registrado, strShellZippedFileInZipfileFilename não incluir a extensão.
No entanto, o arquivo compactado (objeto oShellZippedFileInZipfile) também tem uma propriedade de Caminho, que inclui a extensão.Assim você pode obter o nome do arquivo, incluindo a extensão como este:
strShellZippedFileInZipfileFilename = Right(oShellZippedFileInZipfile.Path, InStr(StrReverse(oShellZippedFileInZipfile.Path), Application.PathSeparator) - 1)
Solução
Uma coisa a ter em mente são as opções de pastas no Windows Explorer.Isso pode não ajudá-lo neste caso, mas tive várias interações do FSO que tenham um problema enorme com como os arquivos são exibidos no Windows Explorer.Algo tão simples quanto seu sistema é exibir a extensão do arquivo, e o outro não é, às vezes pode ser o culpado em procurar arquivos.