powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Может ли FSO "увидеть" слишком длинные имена файлов?
8 сообщений из 8, страница 1 из 1
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39619094
K-Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Моя старая задача с новой проблемой: От клиентов приходят архивы произвольной структуры. Пользователи распаковывают их в каталоги, имеющие свою сложную структуру. Имена (перечень) файлов нужно занести в базу Access. Пользователь в Access-овском приложении выбирает подкаталог и дальше Access с помощью FSO сканирует его содержимое и составляет список файлов. Беда в том, что каким-то, неисповедимым мне способом, иногда случается так что суммарная длина пути и файла превышает максимально допустимую (несмотря на то, что они спокойненько лежат в каталоге). И в этом случае FSO их просто "не замечает". Т.е., например, в каком-то подкаталоге лежит 20 файлов: 10 с короткими именами и 10 со слишком длинными. FSO видит только те 10, у которых короткие имена. И никаких сообщений об ошибках. Мне нужно каким-то образом ловить такие ситуации.
М.б. кто-нибудь что-нибудь подскажет?
Заранее благодарен.
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39619324
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил. Точно, длинные пути не определяет. Почему? Не знаю. Попробуйте вот этот код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
   Dim strFolder As String
    Dim Path As String, fName As String, i As Integer

    strFolder = "c:\ImportXLS\" 

Path = strFolder & "*.*" ' можно и "*.xls"
fName = Dir(Path)
If Len(fName) = 0 Then
    Debug.Print "Папка пуста"
Else
    i = 0
    Do While fName <> ""
        i = i + 1
        Debug.Print i, fName
        fName = Dir
    Loop
    Debug.Print "Просмотр окончек"
End If

Длинные имена читает.
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39619334
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K-NickИ в этом случае FSO их просто "не замечает"Просто ошибка объекта не транслируется в программу. Реализуй тот же блок кода, но на VBS - получишь сообщение об ошибке и хоть какую-то информацию к размышлению...
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39619340
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае я бы порекомендовал отказаться от FSO и опуститься до FindFirstFileW/FindNextFileW. Они точно без проблем читают имена в 32 кб длиной...
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39619342
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А лучше сначала приведи здесь блок своего кода.
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39626919
K-Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaВ любом случае я бы порекомендовал отказаться от FSO и опуститься до FindFirstFileW/FindNextFileW. Они точно без проблем читают имена в 32 кб длиной...
Большое Спасибо!
У меня FindFirstFileW/FindNextFileW тоже не видят слишком длинных путей к файлам, но они возвращают информацию об ошибке. Это уже значительно лучше.
Почему-то я почти не нашел примеров использования этих функций с VBA, только вот здесь (если кому-нибудь понадобится) неплохой пример: https://www.experts-exchange.com/questions/21775294/Using-FindFirstFileW-and-FindNextFileW.html
И не нашел ни одного примера с использованием CreateDirectotyW (Если уж отказываться от FSO - то отказываться). Почему-то он не всегда создает каталоги. Без видимых причин. И GetLastError возвращает 0
Использую так:
Код: vbnet
1.
E = CreateDirectoryW(StrPtr(NewDir), VarPtr(Null))

Не подкинете ли, великодушно, примерчик или ссылку?
Заранее премного благодарен.
(Я в WinAPI-шных функциях не силен только вчера начал рыться)
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39627053
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K-NickМ.б. кто-нибудь что-нибудь подскажет?
Заранее благодарен.

1. Если нужны только имена файлов, можно не распаковывать архив, а использовать возможность архиватора сформировать этот список в отдельный файл/консоль.
2. Можно использовать команду subst для сокращения имени файла: subst x: c:\VeryLongPath, затем работать с виртуальным диском x:
3. Попробовать к началу пути добавить 5 символов \\?\
...
Рейтинг: 0 / 0
Может ли FSO "увидеть" слишком длинные имена файлов?
    #39627054
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Попробовать к началу пути добавить 5 символов \\?\
Поправка: 4 символа
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Может ли FSO "увидеть" слишком длинные имена файлов?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]