Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2019, 13:28   #1
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию Передача длинного полного имени в функцию FindFirstFileW.

Добрый день.
В справке по функции FindFirstFileW, написано, что в параметр "lpFileName" можно передать примерно 32 тыс символов, для этого надо перед полным именем подставить \\?\.
Я подставляю перед полным именем \\?\.
Передаю примерно 1 тыс символов и возвращается ошибка 87. А по логике должна быть 2 - файл не существует.
Если передаю примерно 250 символов, то возвращается ошибка 2.
Я прихожу к выводу, что нет смысла использовать \\?\. Или в каких-то случаях это нужно?

Программирую не на C++, поэтому не смогу воспользоваться встроенными средствами языка C++.
Korshi вне форума Ответить с цитированием
Старый 23.06.2019, 13:52   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

В чем, собственно, суть поста?
waleri вне форума Ответить с цитированием
Старый 24.06.2019, 07:19   #3
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

Полное имя вымышленно. Я просто пытаюсь понять ситуацию.
Полное имя я формирую так:
Код:
FN = "C:\Users\User\Desktop\файл" & String(1000, "a")
FN = "\\?\" & FN
Если обрезаю это полное имя до 282, то функция возвращает ошибку 2. Начиная с 283 символов ошибка 87.
Но создать файл с количеством символов в полном имени 282 нельзя наверное. Какие-то нестыковки.
Код:
FN = Left(FN, 282)
Korshi вне форума Ответить с цитированием
Старый 24.06.2019, 10:41   #4
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Korshi Посмотреть сообщение
Код:
FN = "C:\Users\User\Desktop\файл" & String(1000, "a")
FN = "\\?\" & FN[
Энто по-каковски?
taras-proger77 вне форума Ответить с цитированием
Старый 24.06.2019, 10:48   #5
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

К этому пути:
C:\Users\User\Desktop\файл
справа добавляется одна тысяча английских букв "a".
Получается так:
C:\Users\User\Desktop\файлaaaaaaaaa aaaaaaa....a

Спереди полного имени добавляется префикс: \\?\ и получается так:
\\?\C:\Users\User\Desktop\файлaaaaa aaaaaaaaaaa....a

Полное имя записывается в переменную FN и переменная FN передается в функцию FindFirstFileW.
Korshi вне форума Ответить с цитированием
Старый 24.06.2019, 11:09   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
\\?\
хоть и 32767 символов, но каждый участок между слешами походу не длиннее 255. GetVolumeInformation и lpMaximumComponentLength
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.06.2019 в 11:12.
Аватар вне форума Ответить с цитированием
Старый 24.06.2019, 11:47   #7
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

Аватар, а вообще, можете привести пример, когда может потребоваться MAX_PATH, в которой 32 тыс символов?
Korshi вне форума Ответить с цитированием
Старый 24.06.2019, 11:53   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Когда вам нужен такой длинный путь. Например, \mysupercoolserver\backups\lastyear \01-february\partners\superpartner\roga andkopyta\otchety\...
p51x вне форума Ответить с цитированием
Старый 24.06.2019, 11:58   #9
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

p51x, физически Windows позволит создать путь с длиной 32 тыс символов?
У меня получается создать папку с полным именем длиной 247 символов. Если создаю 248, то происходит ошибка.
Не знаю, как провести тест правильно, чтобы проверить.
Может быть нужно создавать вложенные папки с короткими именами.
Korshi вне форума Ответить с цитированием
Старый 24.06.2019, 12:04   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

32 тыс не пробовал, но за 255 точно выходил
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод имени файла с клавиатуры и передача в функцию - C (СИ) Alex_Kardo Помощь студентам 4 17.11.2015 15:16
Передача имени ссылки economic_man PHP 4 24.02.2015 21:30
Передача в функцию указателя на функцию C Jar Помощь студентам 3 03.05.2014 16:27
Передача пути и имени файла Miha85193 Общие вопросы Delphi 13 07.07.2010 15:02
Передача имени класса как параметра Квэнди Общие вопросы Delphi 14 06.04.2009 20:09