Мы обнаруживаем проблему с длинными именами файлов, обычно в «Моих документах» или на общих дисках.
По сути, кажется, что можно написать документ с очень длинным именем и сохранить его, скажем, в «Мои документы». Что нормально на этом компьютере, документ называется «Мои документы \ verlylongfilename».
Проблема возникает, когда вы попадаете на сервер, на котором хранятся файлы, и путь меняется на «e: \ All Users \ Staff Folders \ JSmith \ verylongfilename», что увеличивает количество символов над тем, с чем проводник может что-либо делать.
Я нашел единственный способ «удалить» или переименовать эти файлы - это сопоставить их с папкой, но это совершенно бессмысленно, если вы хотите переместить группу папок.
Является ли это просто ограничением, с которым мы должны жить и исправлять по мере обнаружения, или есть другой способ получить доступ к этим файлам, или даже запретить исходным пользователям сохранять имена файлов, превышающие, скажем, 30 символов? Может быть, настройка GPO?
Файловая система NTFS поддерживает пути длиной до 32767 символов Unicode с каждым компонентом пути (каталог или имя файла) длиной до 255 символов. Но Windows Explorer и большинство других приложений Win32 поддерживают только 255 символов в пути.
Вы могли бы использовать Робокопия, бесплатный инструмент от Microsoft, который полностью поддерживает длинные имена путей (более 256 символов). Здесь задокументировано как использовать robocopy со списком всех переключателей и опций.
Вот отрывок из статьи в MSDN, объясняющий, почему многие программы ограничивают пути до 255 символов:
В Windows API (за некоторыми исключениями, обсуждаемыми в следующих параграфах) максимальная длина пути составляет MAX_PATH, которая определяется как 260 символов. Локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, компоненты, разделенные обратными косыми чертами, и завершающий нулевой символ. Например, максимальный путь на диске D составляет
D:\some 256 character path string<NUL>где "" представляет собой невидимый завершающий нулевой символ для текущей системной кодовой страницы. (Символы <> используются здесь для наглядности и не могут быть частью допустимой строки пути.)
Видеть http://www.ratsauce.co.uk/notablog/LongFileNames.asp
это одно из самых глупых дизайнерских решений в семействе Windows NT. Насколько мне известно, невозможно запретить пользователям создавать длинные имена файлов.
JR
У меня была аналогичная проблема при автоматизации некоторой параметризованной очистки на групповых и домашних дисках.
Я написал специальное приложение на C # для этого, но для обработки длинных имен файлов необходимо было использовать Unicode-версию Win32 api, а не обычную версию Ascii, имеющую упомянутые выше ограничения. Это также означает префикс строки пути с помощью \? \, Если он сопоставлен, или \? \ UNC \, если это через UNC.
Я могу дать вам несколько примеров кода или дополнительную информацию, если хотите.