|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Доброе время суток. Подскажите , пожалуйста, как получить короткий путь к папке. Есть какая-то сетевая папка с длинным путём. Например: \\common-server\Какие-то данные\Вложенные данные\Вложенные данные 1\Вложенные данные 2\Совсем вложенные данные 3.... Этот путь может быть символов до 300 и , наверное, больше. Если посмотреть свойства папки, то на вкладке "общие" в пункте "Расположение" будет что-то типа: \\common-server\Какие-то данные\Вложенные данные\AD5F~1\548E~1\64F8~1... Проблема в том, что некоторые функции .Net (например Directoryinfo.GetAccessControl()) вываливаются с ошибкой (директория не найдена) на таких длинных путях, что и логично, т.к. это больше максимально допустимой длины в названии. Но, если подставить короткий путь (c ~), скопировав из свойств в проводнике, то всё работает. Этот короткий путь можно получить с помощью WinApi функции GetShortPathName (варианты GetShortPathNameA, GetShortPathNameW). Вроде всё и хорошо, но эта функция не всегда отрабатывает на длинных путях. Объявлена так: [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern int GetShortPathNameW(string pathName, StringBuilder shortName, int cbShortName); Вариации с атрибутом CharSet пробовал разные.Вариант для длинных UNC (\\?\), описанный в документации МС, тоже пробовал. С помощью классов .Net (DirectoryInfo,Path,Directory) удавалось получить только длинный путь. Не подскажите, как можно получить короткий путь к папке или заставить работать функции .Net (например Directoryinfo.GetAccessControl()) на длинных путях? ОС: Windows 10, 64 bit ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 19:50 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 20:42 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 20:50 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Файл может не иметь короткого имени, оно не обязательно. размер строки в C# 2 гб размер пути в файловой системе NTFS 32,767, по 256 на компонент пути. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 21:13 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Relic Hunter, )) это ход конём.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 21:14 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
UVG, Кстати, откуда появляются такие пути?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 21:16 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Petro123Кстати, откуда появляются такие пути?))Перенос папок с вложенными подпапками, переименование промежуточных папок ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 21:46 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я же не про это. У нас на шаре нет такого бардака. Это самим неудобно. Архиваторы не работают как дОлжно и безглючно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 22:45 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Petro123Shocker.Pro, Я же не про это. У нас на шаре нет такого бардака. Это самим неудобно. Архиваторы не работают как дОлжно и безглючно.На каком таком шаре? Не нада ля-ля, все работает нормально и определяется не именем папок, а исключичельно радиусом кривизны рук. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 22:57 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Relic Hunter, Шара это расшаренная папка выполненных работ сотрудниками. Когда не в базу результат. Глючит, это когда архивируешь длинный путь и потом выкладываешь у себя в еще более глубокую папку. Ни разу не глючило? Значит повезло. Про работает нормально фраза не раскрыта. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 07:12 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Roman MejtesФайл может не иметь короткого имени, оно не обязательно. Это-то , понятно. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
[/quot] Спасибо. Но я писал в вопросе (забыл только код выделить), что эта функция не отрабатывает на длинных сетевых именах, вне зависимости, кстати, от атрибута CharSet. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 11:18 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Petro123UVG, Кстати, откуда появляются такие пути?)) Не знаю. Я не являюсь админом и не создаю эти папки. Но, надеюсь, разобраться, откуда они, нужны ли, можно ли обойтись без них и т.д. и т.п. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 11:21 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Petro123UVG, https://ru.m.wikipedia.org/wiki/Subst ? Спасибо )).Такой вариант известен, на аврал. Вариант с dir ... /X , тогда уж тоже можно рассмотреть )) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 11:30 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
UVGPetro123UVG, Кстати, откуда появляются такие пути?)) Не знаю. Я не являюсь админом и не создаю эти папки. Но, надеюсь, разобраться, откуда они, нужны ли, можно ли обойтись без них и т.д. и т.п. )) Да. Отпишись потом что за файлы на такой глубине. Ну и тест длинного пути сюда дай как пример. ИЛи ошибка вообще неповторяемая плавающая? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 11:45 |
|
Как получить короткий путь к папке?
|
|||
---|---|---|---|
#18+
Petro123UVGпропущено... Не знаю. Я не являюсь админом и не создаю эти папки. Но, надеюсь, разобраться, откуда они, нужны ли, можно ли обойтись без них и т.д. и т.п. )) Да. Отпишись потом что за файлы на такой глубине. Ну и тест длинного пути сюда дай как пример. ИЛи ошибка вообще неповторяемая плавающая? Файлы какие...., обычные пользовательские файлы, на такой глубине (эксели, доки и т.д. и т.п.).В большинстве своём, программы с ними работают, но некоторые глючат... Ошибка не плавает, прекрасно повторяется (GetLastWin32Error() выдаёт стабильно 3-ку, в описании: "The system cannot find the path specified" ). Сейчас проблема-то, по сути, решена рекурсивным вызовом GetShortpartNameW , когда сначала короткий путь создаётся, для директории, а потом для вложенных в неё директорий, уже по имеющемуся короткому пути. Этот алгоритм, содержит потенциальную ошибку, для случая, когда короткий путь директории совместно с длинным названием поддиректории вылезают за ограничение длины, но пока такого не встретилось. Ну , а можно ли избавится от сегментов в 8.3 нотации, поговорю, как будет возможность, с админами. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 12:43 |
|
|
start [/forum/topic.php?fid=20&msg=39764692&tid=1399104]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 239ms |
0 / 0 |