Как проверить, ведет ли путь к исполняемому файлу?

Пытаюсь создать какой-нибудь файловый браузер. Я хочу знать, является ли файл по пути исполняемым кроссплатформенным способом.

Как это сделать с boost :: filesystem?


person Rella    schedule 19.04.2011    source источник


Ответы (2)


Boost не имеет сведений о разрешениях, потому что разрешения POSIX не являются «кроссплатформенными».

При необходимости используйте имеющиеся в вашем распоряжении API-интерфейсы для конкретных платформ. Извините!

person Lightness Races in Orbit    schedule 19.04.2011
comment
не могли бы вы предоставить образцы кода, чтобы обойти это? - person Rella; 19.04.2011
comment
POSIX / Windows - person Lightness Races in Orbit; 19.04.2011

Вы можете попробовать QT. Это кроссплатформенный. Вам не нужно беспокоиться о различиях операционных систем при работе с файлами. Что вы подразумеваете под «исполняемым файлом», почему-то непонятно. Если вы говорите о правах доступа к файлам, OT может предоставить такую ​​информацию (просто посмотрите документацию класса QFile). Если вы хотите узнать, можете ли вы его запустить или нет, у вас должно быть какое-то соглашение о расширении файлов. Например, .exe в Windows. Я не знаю, может быть, есть способ посмотреть на начальные биты файла и узнать, является ли он двоичным или нет, но я думаю, что вы не сможете найти для этого вызов библиотеки. Для этого вам необходимо реализовать некоторые процедуры, специфичные для платформы. Если я не ошибаюсь, файловые браузеры в основном смотрят на расширение файла, чтобы узнать его тип. Например, если вы измените расширение файла PDF на exe, проводник Windows увидит этот файл как исполняемый файл. Очевидно, что после предположения о типе файла он может попытаться узнать некоторые другие вещи о файле, например, значок исполняемого файла. Но изначально он смотрит только на расширение. В противном случае просмотр каталогов, содержащих большое количество файлов, будет очень медленным.

Надеюсь, я дал здесь некоторую актуальную информацию

person delete_this_account    schedule 19.04.2011