Tại sao việc thay đổi bản mở rộng của người dùng với trò chơi cũng thay đổi một tập tin Ngày sửa đổi


4

Một cái gì đó tôi nhận thấy một lúc trước. Tôi sử dụng Carbon Copy Cloner để sao lưu các tệp của mình và tôi nhận thấy một ngày khi tôi thay đổi cờ "Mở bằng" của video để luôn mở tệp video bằng Movist thay vì Quicktime và lần sau, bản sao này chạy lại sao chép tệp. Mặc dù không có gì thay đổi. Điều đó khiến tôi nhận ra rằng các thay đổi của OS X thay đổi ngày sửa đổi tệp gây ra các chương trình sao lưu như Rupync (CCC và SuperDuper sử dụng) và Time Machine để sao chép lại tệp, ngay cả khi kích thước 10GB.

tại sao nó làm vậy? Có một lý do kỹ thuật hay nó là một giám sát? Có vẻ như một ý tưởng ngớ ngẩn với tôi. Đặc biệt là khi thay đổi nhãn không sửa đổi tệp và lựa chọn màu được sao chép mà không sao chép toàn bộ tệp.

Câu trả lời:


5

Một số thử nghiệm sử dụng xattrlệnh cho thấy điều này:

  • Thông tin nhãn được lưu trữ trong com.apple.FinderInfothuộc tính mở rộng, mà mọi tệp nên có theo mặc định.
  • Các hiệp hội ứng dụng tùy chỉnh được lưu trữ trong com.apple.ResourceForkthuộc tính, điều mà không phải tập tin nào cũng có.
  • Cập nhật FinderInfothuộc tính không làm cho ngày sửa đổi được sửa đổi.
  • Tạo / cập nhật ResourceForknguyên nhân ngày sửa đổi sẽ được sửa đổi.

Ngã ba tài nguyên trong lịch sử có một vị trí đặc biệt trong các hệ thống tệp Mac. Tôi không chắc liệu com.apple.ResourceFork thuộc tính mở rộng có giống như một ngã ba tài nguyên hay không , nếu thuộc tính sau được thay thế bởi cái trước hoặc cách chúng được kết nối.

Nếu có sự khác biệt về kỹ thuật giữa thuộc tính mở rộngngã ba tài nguyên , có thể "cần thiết" cho tệp được sửa đổi khi ngã ba tài nguyên được cập nhật, nhưng không phải khi thuộc tính mở rộng được viết.
Có thể là API (kế thừa) để cập nhật các tài nguyên sẽ cập nhật ngày sửa đổi tệp trong quy trình, trong khi API thuộc tính mở rộng thì không. Cái sau có thể có lỗi, có thể là do những triết lý khác nhau.

Thông tin mơ hồ, nhưng nó có thể cung cấp một cái nhìn sâu sắc hơn một chút. Cuối cùng, mặc dù bạn đúng. Một số sửa đổi thông tin meta khiến ngày sửa đổi được cập nhật, một số khác thì không. Cho dù có một lý do đằng sau điều này hay nếu đó chỉ là một cuộc giám sát, chỉ một vài kẻ tại Apple có thể biết. :)


1
Đôi khi tôi ước chúng ta có khả năng nói chuyện trực tiếp với những người thực sự có quyền kiểm soát những gì đang được lập trình. Nếu không, bạn chỉ cần gửi email đến một số máy bay không người lái mà bạn thậm chí không thể chắc chắn sẽ được đọc. Khác tôi sẽ gửi email cho họ và hỏi. Họ không bao giờ lấy lại cho bạn. Đoán tôi chỉ cần đảm bảo không thay đổi thuộc tính Open With cho các tệp lớn. Cảm ơn vì đã có nhiều thông tin!
Jason Anderson

1
@Jason Bạn có thể thử gửi một vé thứ tư về vấn đề này, cần được nhà phát triển đọc. Nhưng nó có thể bị bỏ qua dưới dạng không phải là lỗi hoặc chỉ là "ẩn danh" được sửa. :)
lừa dối

2

Khi bạn chọn một tệp, mở cửa sổ Nhận thông tin và chọn một ứng dụng không mặc định khác, ràng buộc Dịch vụ khởi chạy này được lưu trong ngã ba tài nguyên của chính tệp đó, trong 'usro'tài nguyên (Ghi đè người dùng). Theo tôi biết, định dạng của tài nguyên này là riêng tư, được xác định bởi Apple và có thể thay đổi. (Tất cả các ký tự chữ thường trong tên OSType cung cấp một đầu mối, vì Apple bảo lưu loại tệp, mã người tạo và loại tài nguyên với tất cả các ký tự chữ thường. Ví dụ: 'icns'loại tài nguyên (Icon Suite), 'ttxt'(ban đầu từ Dạy Văn bản, nhưng hiện là người tạo mã (CFBundleSignature) của TextEdit.app), v.v.).

Tài nguyên này được tạo bằng các hàm Trình quản lý tài nguyên để sửa đổi ngã ba của tệp, từ đó cập nhật ngày sửa đổi của tệp.

Một tệp ví dụ mà tôi vừa thử quy trình này được hiển thị trong hình bên dưới, được mở trong Resorcerer. (Lưu ý đặc biệt: bạn sẽ thấy ở cột bên trái rằng có 2 loại được liệt kê: 'TEXT''usro'Có trên thực tế chỉ có một. 'usro'Entry; Resorcerer cho thấy rằng có một 'TEXT'entry tài nguyên vì nó chú ý đến nội dung trong của tập tin nĩa dữ liệu được dựa trên văn bản (một tệp tiêu đề mã nguồn) và do đó cung cấp quyền truy cập thuận tiện vào nó). Hình ảnh thứ hai cho thấy nội dung của tài nguyên này, về cơ bản chứa một đường dẫn đến ứng dụng đích mà tôi đã chọn.

văn bản thay thế văn bản thay thế

'usro'tài nguyên Ghi đè người dùng này được lưu dưới dạng một phần của chính tệp, điều đó giải thích tại sao Hướng dẫn lập trình dịch vụ khởi chạy: Chọn tùy chọn liên kết cho tệp yêu cầu như sau:

Lưu ý: Tùy chọn ràng buộc rõ ràng cho các mục riêng lẻ không dành riêng cho người dùng nhưng trên toàn hệ thống, chúng tiếp tục áp dụng cho mục đã cho trên cùng một máy tính, ngay cả khi người dùng khác đăng nhập.

Bây giờ, để tiến thêm một bước. Nếu bây giờ bạn nhấp vào Change Allnút để biến điều này thành ghi đè toàn cục, Launch Services sẽ xóa 'usro'mục nhập tài nguyên và thay vào đó tạo liên kết toàn cầu được lưu trữ trong tệp com.apple.LaunchService.plist (tùy chọn theo người dùng). Xóa 'usro'mục nhập được thực hiện bằng cách sử dụng các chức năng Trình quản lý tài nguyên, sẽ cập nhật ngày sửa đổi của tệp. Lưu ý rằng trong khi nó loại bỏ 'usro'tài nguyên, nó có thể không xóa toàn bộ ngã ba tài nguyên. Trong hầu hết các trường hợp, 286 byte sẽ vẫn còn trong ngã ba tài nguyên, về cơ bản là không gian tối thiểu được chiếm bởi tiêu đề tài nguyên và bản đồ tài nguyên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.