2011-08-01 33 views
6

Tôi đang cố gắng đặt ngày tạo và sửa đổi trên một tệp.Đặt NSFileCreationDate không có hiệu lực

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSDate *now = [NSDate date]; 
NSDictionary *timestampAttr = [NSDictionary dictionaryWithObjectsAndKeys: 
             now, NSFileCreationDate, now, NSFileModificationDate, nil]; 
BOOL ret = [fileManager setAttributes:timestampAttr ofItemAtPath:path error:&err]; 

Ngày sửa đổi được sửa đổi thành công cho tệp. Ngày tạo không thay đổi. Tại sao?

ret là đúng và err là không. -attributesOfItemAtPath trả lại một từ điển chứa cả hai khóa trong timestampAttr và ngày sửa đổi chính xác (sửa đổi) và ngày tạo không chính xác (chưa được sửa đổi).

Chỉnh sửa: Sử dụng OS X phiên bản 10.6. SDK cơ sở của dự án Xcode là 10.5. Tệp nằm trên ổ cứng duy nhất của máy tính của tôi (không có RAID), trong một thư mục bên trong thư mục chính của tôi. Tệp nằm bên trong gói ứng dụng nếu nó tạo sự khác biệt.

Edit: ví dụ đơn giản này hoạt động:

#import <Cocoa/Cocoa.h> 

int main(void) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSFileManager *m = [NSFileManager defaultManager]; 
    NSString *path = ...; 
    [m setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSDate date],NSFileCreationDate,nil] ofItemAtPath:path error:nil]; 
    [pool drain]; 
    return 0; 
} 

Tôi đã dán mã trên vào ứng dụng ban đầu tôi được hỏi về, thiết lập thuộc tính cho tập tin giống như ví dụ đơn giản (trên máy tính để bàn của tôi). Khi mã nằm bên trong ứng dụng, nó không hoạt động.

Chỉnh sửa: OK, điều này thật điên rồ. Ví dụ đơn giản ở trên đã hoạt động (đồng nghiệp của tôi và cả hai đều thấy nó hoạt động trên máy tính của tôi) nhưng giờ nó không hoạt động.

Trả lời

9

Sau khi chơi xung quanh với ví dụ đơn giản một số khác, tôi nhận thấy rằng nó chỉ hoạt động đối với các tệp mà tôi đã sửa đổi gần đây.

Tôi đã có thể lấy ví dụ đơn giản, cũng như mã ban đầu mà tôi đã hỏi, để làm việc nhất quán bằng cách đặt ngày sửa đổi trước khi đặt ngày tạo.

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSDate *now = [NSDate date]; 
NSDictionary *creationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: now, NSFileCreationDate, nil]; 
NSDictionary *modificationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: now, NSFileModificationDate, nil]; 
[fileManager setAttributes:modificationDateAttr ofItemAtPath:path error:&err]; 
[fileManager setAttributes:creationDateAttr ofItemAtPath:path error:&err]; 
0

Phiên bản OS X nào? Tệp mục tiêu nằm ở đâu? Định dạng đĩa của tập tin trên đó tập tin nằm ở đâu? Bạn có loại thiết lập nào trên máy Mac của mình (bạn có phần mềm RAID nào không?)

Thử nghiệm ở đây trong Mac OS X 10.7 với tệp trên Máy tính để bàn của tôi và HFS + hoạt động tốt (cả hai ngày được thay đổi thành now).

Tôi đã có một số kết quả lạ ở đây trong quá khứ với một số API NSFileManager mới hơn. Ví dụ: -copyItemAtPath:toPath:error: không giữ ngày tạo tệp khi sao chép tệp trên khối lượng HFS +. Cụ thể, ngày tạo sẽ bị xóa trong bản sao, tương đương với một ngày trong năm 1904.

Hiểu thêm về thiết lập của bạn có thể giúp xác định nguyên nhân.

+0

Cảm ơn. Xem chỉnh sửa của tôi. – jlstrecker

Các vấn đề liên quan