2011-08-01 15 views
6

Bir dosyada oluşturma ve değiştirme tarihlerini ayarlamaya çalışıyorum.Ayar NSFileCreationDate'in bir etkisi yoktur

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

Değişiklik tarihi, dosya için başarıyla değiştirildi. Oluşturma tarihi değişmedi. Niye ya?

ret doğru ve err sıfırdır. -attributesOfItemAtPath, her iki anahtar da timestampAttr ve doğru (değiştirilmiş) değişiklik tarihini ve yanlış (değiştirilmemiş) oluşturma tarihini içeren bir sözlük döndürür.

Düzenleme: OS X sürüm 10.6 kullanma. Xcode projesinin temel SDK'sı 10,5'tir. Dosya, bilgisayarımın tek sabit sürücüsünde (RAID yok), ana klasörümdeki bir klasörde. Bu, bir fark yaratırsa uygulama paketinin içinde yer alır.

Düzenleme: Bu basit bir örnek çalışır:

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

(benim masaüstünde) basit örnekle aynı dosya için özellikleri ayarlayarak, ben aslen hakkında sorulan app içine yukarıdaki kodu yapıştırılan. Kod uygulamanın içinde olduğunda, çalışmaz.

Düzenleme: Tamam, bu çılgınlık. Yukarıdaki basit örnek çalışıyordu (iş arkadaşım ve ikimiz de bilgisayarımda çalışıyordu) ama şimdi çalışmıyor.

cevap

9

Basit örnekle etrafta dolaştıktan sonra, yalnızca son zamanlarda değiştirdiğim dosyalar için çalıştığını fark ettim.

Ben oluşturma tarih belirlemeden önce değiştirme tarihini ayarlayarak sürekli çalışmak, ben soruyordu orijinal kod yanı sıra basit bir örnek almak başardı.

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

Hangi işletim sistemi X sürümü? Hedef dosya nerede bulunur? Dosyanın bulunduğu birimdeki disk biçimi nedir? Mac'inizde ne tür bir kurulum var (herhangi bir şansa sahip bir Yazılım RAID'iniz var mı)?

Masaüstümdeki bir dosya ile Mac OS X 10.7'de bir test ve HFS + sadece iyi çalışıyor (her iki tarih de now olarak değiştirilmiştir).

Burada daha yeni bazı NSFileManager API'leriyle bazı garip sonuçlar aldım. Örneğin, HFS + birimlerindeki dosyaları kopyalarken -copyItemAtPath:toPath:error: dosya oluşturma tarihini korumaz. Özellikle, oluşturma tarihi nedeni kesin yardımcı olabilir sizin kurulumu hakkında daha fazla bilmek, yıl 1904.

bir tarihe denk kopyalama, içinde temizlenir.

+0

teşekkürler. Düzenlememe bak. – jlstrecker

İlgili konular