Как мне узнать, содержится ли файл в каталоге? - PullRequest
0 голосов
/ 13 марта 2012

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

Я хочу что-то вроде:

if ([directoryPath contains: filePath]) {
    // file is in directory, or in a subdirectory of directory.
}

Пример:

ContainerPath: /Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/AppName.app

Не соответствует: /Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/Documents/db/Sample Data

Соответствует: /Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/AppName.app/Samples/1

Я могу преобразовать все в строки (включая добавление "/" ккаталог контейнера) и проверьте соответствие строки, но, похоже, для этого должен быть встроенный метод.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

В принципе, ваше основное желание удивительно невозможно. Заданный путь к файлу может включать в себя символические или жесткие ссылки, что делает «сдерживание» очень сложным вопросом. Такие ссылки встречаются редко в iOS, но iOS по-прежнему Unix, а в Unix такие вещи являются законными.

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

1 голос
/ 13 марта 2012

Я думаю, что простое совпадение строк - правильный способ сделать это:

if (![directoryPath hasSuffix:@"/"]) directoryPath = [directoryPath stringByAppendingString:@"/"];
if ([filePath hasPrefix:directoryPath]) {
    // ...
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...