2012-04-23 36 views
7

Một trong những tính năng tuyệt vời của BBEdit là cách nó theo dõi các tệp bất kể điều gì xảy ra với các tệp đó. Các ứng dụng mà tôi đang làm việc trên cần phải theo dõi vị trí của một số tập tin thuộc sở hữu của người sử dụng. Người dùng có thể di chuyển hoặc xóa các tệp này và ứng dụng của tôi cần biết vị trí của các tệp đó ngay cả khi ứng dụng của tôi không chạy vào thời điểm thay đổi vị trí xảy ra.Cách theo dõi vị trí tệp trên Mac OS X?

Câu hỏi của tôi là chiến lược được đề xuất cho vấn đề này là gì hoặc có thể là gì? Theo dõi các tệp trong khi ứng dụng đang chạy không phải là vấn đề. Tôi muốn đường dẫn chính xác đến các tệp khi ứng dụng của tôi đang chạy bất kể điều gì đã xảy ra với các tệp đó khi ứng dụng của tôi không chạy.

Tìm kiếm thủ công các tệp có cách tiếp cận tốt nhất hoặc có API mà tôi đang xem giúp dễ dàng hơn không?

Trả lời

12

Bắt đầu từ 10.6, nó được thực hiện bởi “Bookmarks” chức năng của NSURL:

Bookmarks là một cơ sở mới để tạo ra tài liệu tham khảo dai dẳng với các nguồn lực xác định bởi URL. Dấu trang là đối tượng dữ liệu được tạo bởi hệ thống từ URL tài nguyên. Dữ liệu dấu trang bao gồm một tham chiếu bền vững, mờ đục đối với tài nguyên cơ bản cũng như giá trị của thuộc tính tài nguyên được ghi lại khi dấu trang được tạo. Dấu trang có thể được lưu trữ trong bộ nhớ hoặc trên đĩa và sau đó được sử dụng để truy cập các giá trị thuộc tính tài nguyên có chứa hoặc được giải quyết để bao gồm URL của tài nguyên cơ bản. Trong trường hợp tài nguyên hệ thống tệp, dấu trang có khả năng định vị các tài nguyên đã được di chuyển hoặc đổi tên kể từ khi dấu trang được tạo, tương tự như bí danh Trình quản lý bí danh. Lưu ý rằng trong bản phát hành này, dấu trang chỉ giải quyết theo đường dẫn.

Các phương pháp NSURL mới sau đây được ghi nhận hơn nữa trong NSURL.h:

- (NSData *)bookmarkDataWithOptions:(NSURLBookmarkCreationOptions)options includingResourceValuesForKeys:(NSArray *)keys relativeToURL:(NSURL*)relativeURL error:(NSURL **)error; 
- (NSURL*)initByResolvingBookmarkData:(NSData*)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error; 
+ (NSURL *)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error; 
+ (NSDictionary *)resourceValuesForKeys:(NSArray *)keys fromBookmarkData:(NSData *)bookmarkData; 

Trước 10,6, nó đã được thực hiện với aliases.

+0

+1 Rất thú vị ... –

+1

Đây là lý do chính tại sao trong 10.6 Apple đã thêm các phiên bản dựa trên URL của khá nhiều tất cả các API có đường dẫn làm đối số. Bạn hiện được khuyến khích sử dụng URL của tệp thay vì đường dẫn. "Khuyến khích mạnh mẽ" của Apple thường có nghĩa là "cách cũ có thể sẽ không còn được dùng nữa". –

+0

Điều này thật tuyệt. May mắn thay, ứng dụng của tôi yêu cầu 10.6 hoặc cao hơn để các dấu trang dường như là tất cả những gì tôi cần. Cảm ơn rất nhiều @hamstergene. –