2011-08-01 13 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 और सही (संशोधित) संशोधन दिनांक और गलत (अनमोडिफाइड) निर्माण तिथि दोनों कुंजी शामिल हैं।

संपादित करें: ओएस एक्स संस्करण 10.6 का उपयोग करना। एक्सकोड परियोजना का बेस एसडीके 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

ओएस एक्स का कौन सा संस्करण? लक्ष्य फ़ाइल कहां स्थित है? वॉल्यूम का डिस्क प्रारूप क्या है जिस पर फ़ाइल स्थित है? आपके मैक पर आपके पास किस तरह का सेटअप है (क्या आपके पास किसी भी मौके से सॉफ्टवेयर RAID है)?

मैक ओएस एक्स 10.7 में मेरे डेस्कटॉप पर एक फ़ाइल के साथ एक परीक्षण, और एचएफएस + ठीक काम करता है (दोनों तिथियां now में बदल दी गई हैं)।

मैं नए NSFileManager एपीआई से कुछ के साथ अतीत में यहां कुछ अजीब परिणाम मिले थे। उदाहरण के लिए, -copyItemAtPath:toPath:error: एचएफएस + वॉल्यूम्स पर फ़ाइलों की प्रतिलिपि बनाते समय फ़ाइल निर्माण दिनांक को संरक्षित नहीं करता है। विशेष रूप से, निर्माण तिथि प्रतिलिपि है, जो वर्ष 1904

अपने स्थापना के बारे में अधिक जानने का कारण पहचानने में मदद कर सकते हैं में एक तिथि के बराबर में मंजूरी दे दी है।

+0

धन्यवाद। मेरा संपादन देखें। – jlstrecker

संबंधित मुद्दे