FileSystemObject Filexists работает на одном компьютере, но не другой

StackOverflow https://stackoverflow.com//questions/25026553

Вопрос

В Excel 2010 VBA, я использую свойство Fileexists файловой системы, чтобы проверить, существует ли файл. На моем компьютере он работает нормально. Но на другом компьютере Excel 2010, он сообщает, что файл не там, если на самом деле мы видим в Windows Explorer, что файл там. В обоих случаях проверяется файл на локальном жестком диске.

Я проверяю файл сразу после использования оболочки, чтобы расстегнуть файл. Я использую DoEvents после расстегления. Файл извлекается в той же папке, в которую находится ZIP-файл.

Вот код:

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)
.

Есть идеи, почему это работает нормально на одном компьютере, но на другом компьютере сообщает, что файл не там, даже если мы видим, что это ясно?

<Сильное> Обновление:

Я думал, что добавлю эту записку, если это может быть полезно для других, бегущих в то же самое заглушку.

Основная базовая проблема заключалась в том, что при использовании оболочки для извлечения Zaint файл имени имя имени объекта файла Zipped не включает расширение, если проводник Windows является укрывающимся расширением, и файл имеет зарегистрированное расширение. Например:

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
.

Если проводник Windows установлен для скрытия расширений, а файл Zipped имеет зарегистрированное расширение, StrshellZiverFileinzipFileFileName не включает расширение.

Тем не менее, объект файла Zipped (OShellzipleFileinzipFile) также имеет свойство PATH, которое включает в себя расширение. Таким образом, вы можете получить имя файла, включая расширение, как это:

strShellZippedFileInZipfileFilename = Right(oShellZippedFileInZipfile.Path, InStr(StrReverse(oShellZippedFileInZipfile.Path), Application.PathSeparator) - 1)
.

Это было полезно?

Решение

Одно следует помнить, это параметры папки в Windows Explorer.Это может не помочь вам в этом случае, но у меня было несколько взаимодействий FSO, которые имеют огромную проблему с использованием файлов в Windows Explorer.Что-то такое просто, как ваша система отображает расширение файла, а другой нет, иногда может быть виновником в поисках файлов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top