Преодоление длины имени файла MAX_PATH - PullRequest
1 голос
/ 14 июня 2019

Я прочитал много документации на эту тему, но, похоже, не могу понять.

Причина в том, что мне приходится обрабатывать пути к файлам, которые могут быть длиннее MAX_PATHпараметр, вызывающий множество проблем

Я уже заменил все мои ANSI -функции, такие как GetFileAttributesA, на эквивалент UNICODE (GetFileAttributesW) для поддержки расширенной длины пути к файлу с помощьюпрефикс: \\?\.

Однако мне также нужно проверить, является ли путь файла, например, символической ссылкой, и мне нужно знать размер файла, дату последнего изменения и т. д.

Вчтобы сделать это, я использую функцию stat, как показано ниже:

if (fstat(LongFilePath, &file_info) == 0) //THIS FAILS WITH THE ENAMETOOLONG FOR LONG FILEPATHS

Итак, здесь снова проблема в ошибке ENAMETOOLONG из-за слишком длинного имени файла (превышающего MAX_PATH).

Итак, я обнаружил, что могу использовать fstat для доступа к файлу по его дескриптору.Однако, чтобы получить дескриптор, мне нужно использовать fopen, который также имеет ограничение ENAMETOOLONG.

Итак, мой вопрос.Как я могу получить информацию о файле, которая мне нужна (символическая ссылка, размер файла, последнее изменение, .... как предлагает функция stat) для путей к файлам, превышающим MAX_PATH

...