2015-07-15 3 views
4

У меня есть программа, которая загружает некоторые файлы из Интернета. Имя файла может быть очень длинным (100 символов). Пользователь может сохранить эти файлы в папке с очень длинным именем (200 символов). Таким образом, общая длина пути превышает 260 chars.Как обрабатывать очень длинные имена файлов (с помощью TPath)?

Я попытался создать функцию, которая проверяет, слишком ли длинный путь и усекает имя файла, поэтому весь путь будет равен 260 символам. Но функции в классе TPath не работают, если путь превышает 260 символов. Более точно GetDirectoryName вызывает определенную ошибку, когда путь превышает 260 символов, поэтому я не могу использовать его для разделения папки на имя файла.

Главный недостаток дизайна в Delphi?
Я думаю, что TPath, повышающий ошибку при работе с длинными именами файлов, является большим недостатком. Простое использование GetDirectoryName для READ (не для записи) просто приведет к краху вашей программы. TPath должен разрешать обработку длинных путей. MAYBE он должен поднять ошибку ТОЛЬКО при попытке WRITE файлов с длинным путем. Но даже тогда. NTFS принимает длинные пути. Итак, почему Delphi вынуждает вас придерживаться 260? Некоторые программы могут обрабатывать длинные пути. Например, я использую Total Commander (никогда не Explorer), поэтому меня не затрагивает проблема с длинным именем файла.

Любая идея о том, как лечить этот случай?
Примечание. Процесс загрузки автоматизирован, поэтому я не буду останавливаться, чтобы попросить пользователя ввести новое имя файла для каждого файла, который не может быть под 260 символами. Я хочу с этим разобраться.

+1

Префикс с \\? \ Для получения поддержки расширенного пути https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx#maxpath Но тогда вам не понравятся ваши файлы. Если функции в 'TPath' не являются хорошими, можете ли вы рассказать нам, какие из них. –

+0

GetDirectoryName вызывает ошибку, когда путь превышает 260 символов – Ampere

+0

> Но тогда Explorer не понравится ваши файлы - я не хочу сохранять файлы длиной более 260. Я просто хочу урезать путь до 260 символов. Таким образом, мои файлы будут совместимы с проводником. – Ampere

ответ

3

Лично я считаю, что TPath здесь просто неправильно. Утверждать, что пути Windows не могут превышать 260 символов, просто отрицает реальность. Более того, чтобы отрицать возможность выполнения обработки текста на дорожках, действительно совершенно необъяснимо. По-моему, тогда следует избегать TPath.

Это ведет вас в старые добрые времена. Вы можете позвонить ExtractFileDir от SysUtils. Он работает так же хорошо, как и когда-либо.

Смежные вопросы