У меня какое-то поведение, которое кажется мне очень странным в 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