Получите размер файла (fileLen() файла, имя которого содержит символы юникода [Excel VBA]

#excel #vba #unicode

Вопрос:

Я пытаюсь перечислить содержимое каталога в Windows. Все работает, как ожидалось, но когда я пытаюсь определить размер файлов ( Debug.Print FileLen(filepath amp; filename) используя функцию FileLen() , я получаю ошибку 53 во втором файле, потому что в его имени есть символ юникода (знак номера полной ширины U FF03). Есть идеи, как с этим справиться?

Содержимое каталога c:ZTest :

 1#.txt
2#.txt
 

Обратите внимание, что первый файл имеет «обычный» знак номера, а имя второго файла имеет знак номера полной ширины (U FF03). Вот код VBA, который отлично работает без второго Debug.Print .

 Sub ListFiles()
Dim filename As String
Dim filepath As String
filepath = "c:ZTest"
filename = Dir(filepath)
Do While filename <> ""
   Debug.Print filename
   Debug.Print FileLen(filepath amp; filename)
   filename = Dir()
Loop
End Sub
 

Ответ №1:

Пожалуйста, попробуйте следующий способ. Объекты VBScript могут работать с символами, отличными от ASCII, в имени файла:

 Sub ListFilesNonASCIIName()
   Dim FSOLibrary As Object, fldObj As Object, fsoFile As Object
   Dim foldPath As String
   Set FSOLibrary = CreateObject("Scripting.FileSystemObject")
    foldPath = "c:ZTest"
    Set fldObj = FSOLibrary.GetFolder(foldPath)
    For Each fsoFile In fldObj.files
         Debug.Print fsoFile.Name, fsoFile.Size
    Next
End Sub
 

Комментарии:

1. @Gecko Разве приведенный выше код не решил вашу проблему? Вы нашли время, чтобы проверить это?

2. Я протестировал его, и он хорошо работает, решая мою проблему.