2011-08-01 75 views
6

我試圖設置文件的創建和修改日期。設置NSFileCreationDate沒有效果

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]; 

對文件成功修改修改日期。創建日期不變。爲什麼?

ret爲真,err爲零。 -attributesOfItemAtPath返回一個字典,其中包含timestampAttr中的密鑰以及正確的(修改的)修改日期和不正確的(未修改的)創建日期。

編輯:使用OS X版本10.6。 Xcode項目的基礎SDK是10.5。文件位於我的計算機唯一的硬盤驅動器(無RAID)中,位於我的主文件夾內的文件夾中。 該文件位於應用程序包中,如果這有所幫助。

編輯:這個簡單的例子工程:

#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; 
} 

我粘貼上面的代碼進入應用程序,我原來問了一下,設置爲同一個文件的簡單例子屬性(我的桌面上)。當代碼在應用程序中時,它不起作用。

編輯:好的,這太瘋狂了。上面的簡單例子是工作(我的同事和我都看到它在我的電腦上工作),但現在它不工作。

回答

9

在演示了一些簡單的例子之後,我注意到它只適用於我最近修改過的文件。

通過在設置創建日期之前設置修改日期,我能夠獲得簡單的示例以及我所詢問的原始代碼,以便一致地工作。

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

什麼版本的OS X?目標文件位於何處?文件所在卷的磁盤格式是什麼?你有什麼樣的設置你的Mac(你有任何一個軟件RAID)?

在Mac OS X 10.7中的一個測試,在我的桌面上有一個文件,並且HFS +可以正常工作(兩個日期都更改爲now)。

我以前在這裏用過一些較新的NSFileManager API有一些奇怪的結果。例如,在HFS +捲上複製文件時,-copyItemAtPath:toPath:error:不保留文件創建日期。具體而言,創建日期在副本中清除,這相當於1904年的日期。

瞭解有關設置的更多信息可能有助於查明原因。

+0

謝謝。看我的編輯。 – jlstrecker

相關問題