我正在構建一個實用程序應用程序,用於跨Mac OSX的兩個系統同步文件。我需要檢測文件何時被重命名,但在其他情況下是相同的文件。我如何在可可中做到這一點?我如何檢測文件是否已使用Cocoa重命名?
回答
沒有簡單的答案;您需要爲您的應用找出最佳策略。
在一個簡單的級別上使用文件系統編號。您可以使用NSFileSystemFileNumber
來獲取此信息。雖然可能使用FSRef
,但工作可能更好。這是一個C API,但相對簡單,並有一個與FSRefs進行比較的方法。
但是,有很多應用程序執行保存操作,替換磁盤上的文件,更改其文件編號。這可能會讓你的代碼煩躁不安。所以考慮使用別名。這是Finder用來跟蹤別名文件目標的系統。使用別名管理器(C API)或其中一種開放源代碼Objective-C包裝(例如NDAlias或BDAlias)。別名將盡最大努力通過路徑和文件號保持對文件的引用。
您可以查看inode號碼(由NSFileManager返回的屬性中的NSFileSystemFileNumber),它將涵蓋簡單的重命名情況。
了一些額外的細節,我遇到:
如果該文件只改名,那麼該文件將保留相同的inode(NSFileSystemFileNumber)。
但是,如果文件被修改,Mac OS X將通常用新文件的副本替換舊文件,因此inode號碼將不會相同。
如果您在TextEdit中編輯文本文件然後保存它,您可能會注意到文件消失並重新出現在Finder中。但是,如果您使用命令行編輯器(vi,pico,emacs等)編輯此文件,它將直接保存到文件中。
我的猜測是Cocoa應用程序會首先保存到臨時文件,然後替換原始版本的文件,這就解釋了爲什麼inode不同。
我假設你的目標是文件的內容,而不是他們的屬性。最簡單的方法是計算和比較散列。只要逐個讀取兩個文件並比較哈希值, G。與這些MD5例程。
如果您的源和目標位於不同平臺/操作系統上,上述所有內容都將失敗。最好的方法是獲取源文件和目標位置中的新文件和丟失文件的列表,然後如果任何兩個文件具有相同的大小?如果它們具有相同的大小比較校驗和/ CRC,並且如果這是相同的,那麼它們中的一個已經被重命名。
- 1. 檢測文件是否重複,如果不是,則重命名
- 2. EmguCV:如何檢測文件是否已達到使用
- 3. 如何使用jQuery檢測文件上傳是否已完成?
- 4. 如何使用AT命令檢測「RING」是否已結束
- 5. 如何檢查文件是否存在,並在Perl重命名
- 6. Subversion:檢測重命名文件夾
- 7. 檢測Excel文件是否已關閉
- 8. 檢測文件是否已上傳
- 9. 如何使用xslt重命名XML文件。我的代碼是
- 10. 檢查上傳文件重命名前是否存在文件
- 11. 檢查文件是否已簽名
- 12. 我如何使用Cocoa的Accessibility API來檢測窗口是否在前面?
- 13. 是否可以使用FTP命令重命名FTP文件夾?
- 14. 重命名文件是否已經在PowerShell中
- 15. 檢測插件是否已被應用
- 16. 校驗和檢測重複文件和重命名文件
- 17. 如何檢測使用microsoft.bat文件是否爲空文件?
- 18. 如何使用java重命名文件
- 19. 如何使用Python重命名文件
- 20. 如何使用ajax重命名文件
- 21. 如何使用Node.js重命名文件
- 22. 如何使用wstring重命名文件?
- 23. 如何使用Perl重命名文件
- 24. 如何使用R重命名文件?
- 25. 如何使用os.walk()重命名文件?
- 26. 如何在Windows中檢測文件重命名/移動
- 27. 如何檢查文件是否是perl中的命名管道?
- 28. git如何檢測類似的文件,因爲它的重命名檢測?
- 29. 檢測文件名是否爲空
- 30. 如何檢測角度轉換文件是否已加載
好問題,但我懷疑有一種方法。 – 2009-05-03 00:07:54
已經問及回答? http://stackoverflow.com/questions/645321/how-to-dectect-new-or-modified-files-in-mac-osx/645379#645379 – 2009-05-03 00:14:55