open (FileManager.default.fileSystemRepresentation (withPath: path), O_EVTONLY) возвращает -1 - PullRequest
0 голосов
/ 01 марта 2020

Я использую SKQueue для мониторинга некоторых папок в файловой системе ma c. Согласно документации, я добавил пути к каталогам в очереди, но заметил, что при добавлении пути следующая строка кода в SKQueue возвращает -1 и, следовательно, он не может отслеживать мою папку. Пожалуйста, помогите мне в этом.

Документация SKQueue Это документация.

Ниже приведен код из документации, написанной в классе контроллера.

import SKQueue

class SomeClass: SKQueueDelegate {
  func receivedNotification(_ notification: SKQueueNotification, path: String, queue: SKQueue) {
    print("\(notification.toStrings().map { $0.rawValue }) @ \(path)")
  }
}

let delegate = SomeClass()
let queue = SKQueue(delegate: delegate)!

queue.addPath("/Users/steve/Documents")
queue.addPath("/Users/steve/Documents/dog.jpg")

Ниже приведен код внутри зависимости SKQueue.

  public func addPath(_ path: String, notifyingAbout notification: SKQueueNotification = SKQueueNotification.Default) {
    var fileDescriptor: Int32! = watchedPaths[path]
    if fileDescriptor == nil {
      fileDescriptor = open(FileManager.default.fileSystemRepresentation(withPath: path), O_EVTONLY)
      guard fileDescriptor >= 0 else { return }
      watchedPaths[path] = fileDescriptor
    }

fileDescriptor = open (FileManager.default.fileSystemRepresentation (withPath: path), O_EVTONLY)

Приведенный выше код возвращает -1 и, следовательно, не работает. Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 27 апреля 2020

Сбой вызова open(), вероятно, из-за недостаточных разрешений. Начиная с macOS 10.15, приложения не могут получить доступ к определенным файлам и папкам без разрешения (например, к домашнему каталогу пользователя). Подробнее здесь.

...