VBA FileSystemObject показывает файлы, которые больше не существуют - PullRequest
0 голосов
/ 02 октября 2019

У меня какое-то поведение, которое кажется мне очень странным в VBA.

У меня есть следующий код:

Dim oFSO As FileSystemObject
Dim oFolder As Folder
Dim oFile As File

Set oFSO = New FileSystemObject
Set oFolder = oFSO.GetFolder(wbCases.Path & "\..\my\sub\path\to\photos")

For Each oFile In oFolder.Files
    If oFolder.Files.Count = 1 Then
        Name oFolder.Path & "\" & oFile.Name As oFolder.Path & "\" & "12345.jpg"
        oFSO.CopyFile oFolder.Path & "\12345.jpg", oFolder.Path & "\" & "1235.jpg"

    Else
        If oFolder.Files.Count > 1 Then
            Kill oFile
        End If
    End If
Next oFile

Этот код должен проверять содержимое указанной папкив строке

Set oFolder = oFSO.GetFolder(wbCases.Path & "\..\my\sub\path\to\photos")

, которая разрешает следующую существующую папку на сетевом диске:

I: \ root локальной копии для сборки \ my \ sub\ path \ to \ photos

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

А именно, я получаюфайлы, которых больше нет в этом каталоге.

Например, при выполнении этого кода у меня есть пять файлов в этой папке, что подтверждается cmd:

I:\root of Local Copy for building\my\sub\path\to\photos>dir
 Volume in drive I is DE_User11
 Volume Serial Number is 009A-9A03

 Directory of I:\root of Local Copy for building\my\sub\path\to\photos

02.10.2019  09:43    <DIR>          .
02.10.2019  09:14    <DIR>          ..
19.08.2019  16:01         4.818.169 32993a - Copy (3).jpg
19.08.2019  16:01         4.818.169 32993a - Copy (3) - Copy - Copy.jpg
19.08.2019  16:01         4.818.169 32993a - Copy (4).jpg
19.08.2019  16:01         4.818.169 32993a - Copy (3) - Copy.jpg
19.08.2019  16:01         4.818.169 32993a.jpg
               5 File(s)     24.090.845 bytes
               2 Dir(s)     153.919.488 bytes free

Однако при циклическом просмотре файлов в этой папке с использованием вышеприведенного кода VBA я получаю, например, мою переменную oFile, заполненную следующим файлом:

I:\root of Local Copy for building\my\sub\path\to\photos\2229.jpg

Этот файл используется для существует, но я удалил его пару дней назад, и, как указано выше, он не существует в соответствии с командой dir команды cmd. Тем не менее, мой код VBA, кажется, думает, что он существует, вызывая проблемы при попытке удалить его с помощью

Kill oFile

Почему это происходит?

Обновление:

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

dir \a

в папке, я получаю следующий вывод

I:\root of Local Copy for building\my\sub\path\to\photos>dir /a
 Volume in drive I is DE_User11
 Volume Serial Number is 009A-9A03

 Directory of I:\root of Local Copy for building\my\sub\path\to\photos

02.10.2019  09:43    <DIR>          .
02.10.2019  09:14    <DIR>          ..
29.08.2019  09:41            19.456 2229.jpg
29.08.2019  09:41            19.456 2231.jpg
29.08.2019  09:41            19.456 2228.jpg
29.08.2019  09:41            19.456 2226.jpg
19.08.2019  16:01         4.818.169 32993a - Copy (3).jpg
29.08.2019  09:41            19.456 2224.jpg
29.08.2019  09:41            19.456 2225.jpg
29.08.2019  09:41            19.456 2227.jpg
19.08.2019  16:01         4.818.169 32993a - Copy (3) - Copy - Copy.jpg
19.08.2019  16:01         4.818.169 32993a - Copy (4).jpg
19.08.2019  16:01         4.818.169 32993a - Copy (3) - Copy.jpg
19.08.2019  16:01         4.818.169 32993a.jpg
29.08.2019  09:41            19.456 2224 - Copy.jpg
29.08.2019  09:41            19.456 2230.jpg
              14 File(s)     24.265.949 bytes
               2 Dir(s)     153.919.488 bytes free

Однако я не могу удалить ни один из скрытых файлов:

I:\root of Local Copy for building\my\sub\path\to\photos>del 2229.jpg
Could Not Find I:\root of Local Copy for building\my\sub\path\to\photos\2229.jpg
...