2012-02-20 2 views
0

У меня есть приложение, написанное на C. В рамках его действия необходимо проверить, что другое приложение (приложение .app для какао) расположено в правой директории ,Проверка наличия пакета (.app) с использованием CoreFoundation в C

Конечно, используя стандарт C Я не нахожу приложение, потому что для C это каталог . Есть ли функция CoreFoundation, которая позволит мне проверить, существует ли приложение?

Благодаря

ответ

1

Bundle Programming Guide имеет некоторые образцы CoreFoundation для доступа к сверток, а затем получить информацию (например, идентификатор расслоения) из него.

В качестве альтернативы, если вам нужно искать всю систему для данного комплекта, вы, вероятно, можете использовать функции Spotlight/MD для ее поиска.

+0

Я проверил эту страницу, а также [CFBundle Reference] (https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFBundleRef/Reference/reference.html), и я не могу найти что-нибудь, что скажет мне, существует ли приложение в определенном месте. ближайший был 'CFBundleCopyResourceURLInDirectory', но это не то, что я ищу. Мне нужна функция FileExists (filename), которая будет работать с пакетом. в C. –

+0

Работает ли это: запустите 'CFBundleCreate()' на пути, где вы ожидаете, что это будет. Если он возвращает NULL, пакет там не существует. Если это действительный объект, вы знаете, что он существует. –

+0

это сделал. Благодаря! –

0

Если вам просто интересно, существует ли «какой-то каталог с именем something.app существует в данном месте», вы можете просто использовать fstat(), чтобы убедиться, что он существует и что это каталог.

Если вы хотите что-то немного причудливо, то вы можете использовать LSFindApplicationForInfo(), чтобы запросить FSRef или CFURLRef данного идентификатора пакета. Затем вы можете проверить, что возвращаемый путь - это то, что вы хотите.

+0

Возможно, я не объяснил это достаточно четко. Я * знаю *, где должен находиться файл, я просто хочу проверить, что он есть. Все примеры для 'LSFindApplicationForInfo' говорят мне, что эта функция найдет приложение на основе идентификатора или других ресурсов и вернет путь. Мне это не нужно, мне просто нужно проверить, находится ли приложение в каталоге, который должен быть. –

+0

Когда 'LSFindApplicationForInfo' возвращает путь, вы можете увидеть, соответствует ли этот путь тому, что вы ожидаете. Если вам просто нужно «это каталог в этом месте», тогда вы можете использовать 'fstat().' –

+0

fstat() вернет true в каталог с именем application.app, что не означает, что 'application.app' есть , Кроме того, я не знаю, какой идентификатор приложения использовать. Я не писал это приложение, это стороннее приложение, которое некоторые наши разработчики используют для поддержки наших. Итак, нет ли 'if (FILE * file = fopen (имя файла,« r »)), но для пакета, который скажет мне, выходит ли этот файл или нет? –

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