簡體   English   中英

監視Cocoa / Cocoa Touch中的目錄

[英]Monitoring a directory in Cocoa/Cocoa Touch

我試圖找到一種方法來監視目錄的內容以進行更改。 我嘗試了兩種方法。

  1. 使用kqueue監視目錄
  2. 使用GCD監視目錄

我遇到的問題是我找不到檢測哪個文件已更改的方法。 我試圖監視一個目錄中可能有數千個文件,我不想在每個目錄上調用stat來找出哪些文件發生了變化。 我也不想為該目錄中的每個文件設置單獨的調度源。 這目前可能嗎?

注意:我已經記錄了使用kqueueGCD監視文件的實驗

我的建議是咬住子彈並在另一個線程中進行目錄掃描,即使你在談論成千上萬的文件。 但如果你堅持,這就是答案:

如果不卷起袖子進行內核潛水,就沒有辦法做到這一點。

您的第一個選擇是使用FSEvents框架,該框架在創建,編輯或刪除文件時發送通知(以及與屬性有關的事情)。 概述在這里 ,並且有人圍繞API編寫了一個Objective C包裝器 ,盡管我還沒有嘗試過。 但是概述沒有提到關於文件更改的事件的部分,只是目錄(比如kqueue)。 我結束了使用從代碼這里沿頭文件在這里編譯我自己的記錄,我可以用它來獲取各個獨立的文件級別的事件。 您必須在應用程序中編寫一些代碼才能在后台運行記錄器並對其進行監控。

或者,看看“ fs_usage ”命令,它持續監視所有文件系統活動(我的意思是全部 )。 這已經有了Darwin,所以你不必自己編譯。 您可以使用kqueue監聽目錄更改,同時監視“ fs_usage ”的輸出。 如果從kqueue收到目錄已更改的通知,則可以查看fs_usage的輸出,查看寫入的文件,並根據修改的目錄檢查文件名。 fs_usage是一個firehose,所以准備好與Grep一起使用一些選項來馴服它。

為了讓事情變得更有趣,您的FSEvents記錄器和fs_usage都需要root訪問權限,因此您必須先獲得用戶的授權才能在OS X應用程序中使用它們(有關如何使用的信息,請查看“ 授權服務編程指南”) 。做它)。

如果這聽起來非常復雜,那就是因為它。 但至少你沒有找到困難的方法!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM