У меня есть программа, которая загружает некоторые файлы из Интернета. Имя файла может быть очень длинным (100 символов). Пользователь может сохранить эти файлы в папке с очень длинным именем (200 символов). Таким образом, общая длина пути превышает 260 chars.Как обрабатывать очень длинные имена файлов (с помощью TPath)?
Я попытался создать функцию, которая проверяет, слишком ли длинный путь и усекает имя файла, поэтому весь путь будет равен 260 символам. Но функции в классе TPath не работают, если путь превышает 260 символов. Более точно GetDirectoryName вызывает определенную ошибку, когда путь превышает 260 символов, поэтому я не могу использовать его для разделения папки на имя файла.
Главный недостаток дизайна в Delphi?
Я думаю, что TPath, повышающий ошибку при работе с длинными именами файлов, является большим недостатком. Простое использование GetDirectoryName для READ (не для записи) просто приведет к краху вашей программы. TPath должен разрешать обработку длинных путей. MAYBE он должен поднять ошибку ТОЛЬКО при попытке WRITE файлов с длинным путем. Но даже тогда. NTFS принимает длинные пути. Итак, почему Delphi вынуждает вас придерживаться 260? Некоторые программы могут обрабатывать длинные пути. Например, я использую Total Commander (никогда не Explorer), поэтому меня не затрагивает проблема с длинным именем файла.
Любая идея о том, как лечить этот случай?
Примечание. Процесс загрузки автоматизирован, поэтому я не буду останавливаться, чтобы попросить пользователя ввести новое имя файла для каждого файла, который не может быть под 260 символами. Я хочу с этим разобраться.
Префикс с \\? \ Для получения поддержки расширенного пути https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx#maxpath Но тогда вам не понравятся ваши файлы. Если функции в 'TPath' не являются хорошими, можете ли вы рассказать нам, какие из них. –
GetDirectoryName вызывает ошибку, когда путь превышает 260 символов – Ampere
> Но тогда Explorer не понравится ваши файлы - я не хочу сохранять файлы длиной более 260. Я просто хочу урезать путь до 260 символов. Таким образом, мои файлы будут совместимы с проводником. – Ampere