Наблюдайте файл или папку в Objective C

потому что Вы, которых несколько присваивают lists_to_filter в цикле, таким образом, он только возвратит последний результат. это не, включают 'something', последний элемент в ['exclude', 'something']

, можно использовать all для достижения цели:

lists_to_filter = [labels_list for labels_list in lists_to_filter if all(exclude_label not in labels_list for exclude_label in ['exclude', 'something'])]

или расширяются all логика:

    result = []

    for labels_list in lists_to_filter:
        exclude = False
        for exclude_label in ['exclude', 'something']:
            if exclude_label in labels_list:
                exclude = True
        if not exclude:
            result.append(labels_list)

    print(result)

или можно использовать filter согласно заголовку:

lists_to_filter = list(filter(lambda x: all(exclude_label not in x for exclude_label in exclude_labels), lists_to_filter))

вывод:

[['b']]

Hope, которая помогает Вам и комментирует, есть ли у Вас дальнейшие вопросы.:)

20
задан Garrett 6 September 2009 в 21:18
поделиться

5 ответов

API-интерфейс FSEvents идеально подходит, если вы просто хотите наблюдать за каталогами, но не обрабатывает мониторинг отдельных файлов. У Стю Коннолли есть отличная оболочка Objective-C для API FSEvents C, она называется SCEvents, и вы можете получить ее здесь:

http://stuconnolly.com/blog/scevents-011/

Хорошая вещь о FSEvents заключается в том, что вам просто нужно следить за одной папкой, и вы будете уведомлены о любых изменениях, которые происходят в любом месте иерархии подпапок этой папки.

Если вам нужны уведомления на уровне файлов, вам нужно будет использовать kqueues. У Ули Кустерера есть отличная оболочка для Objective-C:

http://zathras.de/angelweb/sourcecode.htm#UKKQueue

Любой из этих методов намного проще, чем напрямую бороться с API C, которые не являются особенно хорошо задокументирован и немного тупой.

32
ответ дан 30 November 2019 в 00:01
поделиться

Не уверен, что лучше всего, но способ - запустить NSThread, который будет регулярно (например, каждую секунду) проверять даты создания файлов в каталог, а затем иметь делегата, связанного с этим потоком, чтобы выполнить какое-либо действие при добавлении нового файла

-3
ответ дан 30 November 2019 в 00:01
поделиться

Если вы меняете файл или папку, я полагаю, что поисковая система Spotlight обновит свою базу данных, чтобы отразить ваши изменения.

Таким образом, вы можете настроить поток, который прослушивает уведомления kMDQueryDidUpdateNotification с помощью запроса Spotlight , относящегося к этому файлу или папке.

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

1
ответ дан 30 November 2019 в 00:01
поделиться

Попробуйте использовать FSEvents , хотя это C API

OS 10.5 или новее

6
ответ дан 30 November 2019 в 00:01
поделиться

Если вам действительно нужно использовать kqueue (как обсуждалось в других ответах), Google Toolbox для Mac имеет красивую оболочку Objective-C , которую я до сих пор использовал без проблем.

2
ответ дан 30 November 2019 в 00:01
поделиться