2010-01-21 12 views
26

मैं एक फ़ाइल की निर्माण तिथि (संशोधन दिनांक नहीं) खोजने की कोशिश कर रहा हूं।आईओएस: आप फ़ाइल की निर्माण तिथि कैसे प्राप्त करते हैं?

निर्माण तिथि फ़ाइल के गुणों में प्रतीत नहीं होती है, हालांकि संशोधित दिनांक है।

मैं इस कोड का उपयोग कर रहा ..

NSFileManager* fm = [NSFileManager defaultManager]; 

NSString* path = [PathHelpers pathInDocumentsFolderWithFilename:FILE_NAME]; 
NSDictionary* attrs = [fm attributesOfItemAtPath:path error:nil]; 

if (attrs != nil) { 
    return (NSDate*)[attrs objectForKey: NSFileCreationDate]; 
} else { 
    return nil; 
} 

यह हमेशा शून्य देता है। टंकण 'पो attrs' डीबगर में NSDictionary में कुंजी/मान जोड़े की सूची प्राप्त करने के लिए निम्न ..

NSFileGroupOwnerAccountID = 20 रिटर्न;
NSFileGroupOwnerAccountName = कर्मचारी;
NSFileModificationDate = 2010-01-21 11:47:55 +0000;
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = ben;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 338;
NSFileSystemFileNumber = 2234;
NSFileSystemNumber = 42553324;
NSFileType = NSFileTypeRegular;

कोई निर्माण तिथि .. बाह ..

कोई भी निर्माण तिथि होने का एक और तरीका पता है या यह सिर्फ आईओएस में मौजूद नहीं है?

+0

ध्यान दें कि ट्रेस मैं दिखाया है iphone सिम्युलेटर से है काम कर सकते हैं। मुझे असली डिवाइस पर एक ही समस्या मिलती है हालांकि - निर्माण तिथि सूचीबद्ध नहीं है। –

+1

प्रलेखन NSFileCreationDate को लौटाए गए मान के रूप में सूचीबद्ध करता है, ओ आप ऐप्पल के साथ एक बग फाइल करना चाहते हैं। यह निश्चित रूप से लगता है जैसे यह उम्मीद के रूप में व्यवहार नहीं कर रहा है। –

उत्तर

61

इस कोड को वास्तव में मेरे लिए अच्छा निर्माण तिथि देता है? हो सकता है कि समस्या है।

+0

यह मेरे लिए ठीक काम करता है, जेफ केली का जवाब अभी भी मान्य है? – bentford

+0

इस मूर्ख सवाल पूछने के लिए खेद है ... "attributesOfItemAtPath: पथ" इस "पथ" चर को कैसे प्रारंभ करें। मान लीजिए कि मेरे पास प्रोजेक्ट की रूट में "icon_57.png" नाम की एक छवि है? –

+1

@ jeet.chanchawat यहां एक स्विफ्ट कार्यान्वयन है ... ओबीजेसी के लिए वाक्यविन्यास प्राप्त करने के लिए पर्याप्त आसान होना चाहिए 'दस्तावेज डायरेक्टरी स्ट्रिंग = NSSearchPathForDirectoriesInDomains (DocumentDirectory, .UserDomainMask, true) [0] वापसी दस्तावेजDirectory.stringByAppendingPathComponent ("icon_57.png") ' – Magoo

1

क्या आप का उपयोग कर सकते हैं st_birthtimespec लौटाई गई संरचना के सदस्य? आपको फ़ाइल के लिए सी फ़ाइल हैंडल बनाना होगा और timespec मान को NSDate में परिवर्तित करना होगा, लेकिन यह कुछ भी नहीं है।

NSFileManager* fm = [NSFileManager defaultManager]; 
NSDictionary* attrs = [fm attributesOfItemAtPath:path error:nil]; 

if (attrs != nil) { 
    NSDate *date = (NSDate*)[attrs objectForKey: NSFileCreationDate]; 
    NSLog(@"Date Created: %@", [date description]); 
} 
else { 
    NSLog(@"Not found"); 
} 

आप ऐप के अंदर फ़ाइल बना रहे:

+1

नहीं, आपको इस तथ्य के कारण fstat64 का उपयोग करने में सक्षम नहीं होना चाहिए कि, मेरे सबसे अच्छे ज्ञान के लिए आईफोन ओएस अभी तक 64 बिट्स नहीं है। दुर्भाग्य से, 32 बिट्स मोड में, स्ट्रक्चर टाइमपेक st_birthtimespec स्ट्रक्चर स्टेट में उपलब्ध नहीं है। यही वजह है कि एनएसडीएटी ऑब्जेक्ट [attrs fileCreationDate] द्वारा लौटाया गया है, आईफोन पर हमेशा 3.1.2 के रूप में शून्य होगा, जहां एएसआरएस एनएस डिक्शनरी फाइल विशेषताएँ हैं। –

+0

धन्यवाद दोस्तों। ऐसा लगता है कि फ़ाइल को बनाए जाने और इसे NSUserDefaults में संग्रहीत करने के लिए मुझे बस याद रखना होगा। –

+0

हम कोड urinieto कोड का उपयोग क्यों नहीं कर सकते? – bentford

15

में fileCreationDate के लिए एक विशेष संदेश है। मेरे लिए निम्नलिखित काम करता है:

ऑब्जेक्टिव-सी:

NSDate *date = [attrs fileCreationDate]; 

स्विफ्ट:

let attrs = try NSFileManager.defaultManager().attributesOfItemAtPath(path) as NSDictionary 
attrs.fileCreationDate() 
3
NSDate *creationDate = nil; 
    if ([fileManager fileExistsAtPath:filePath]) { 
     NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil]; 
     creationDate = attributes[NSFileCreationDate]; 
    } 

इसके here

7

स्विफ्ट 2।0 संस्करण:

do { 
    let fileAttributes = try NSFileManager.defaultManager().attributesOfItemAtPath(YOURPATH) 
    let creationDate = fileAttributes[NSFileCreationDate] as? NSDate 
    let modificationDate = fileAttributes[NSFileModificationDate] as? NSDate 
    print("creation date of file is", creationDate) 
    print("modification date of file is", modificationDate) 
}catch let error as NSError { 
    print("file not found:", error) 
} 
1

स्विफ्ट 3 संस्करण कोड:

do { 
     let fileAttributes = try FileManager.default.attributesOfItem(atPath: yourPathString) 
     let modificationDate = fileAttributes[FileAttributeKey.modificationDate] as! Date 
     print("Modification date: ", modificationDate) 
    } catch let error { 
     print("Error getting file modification attribute date: \(error.localizedDescription)") 
    } 
+0

यदि आप अपना उत्तर भी समझा सकते हैं तो सराहना करें। –

+0

यदि आप ओपी के अनुसार फ़ाइल निर्माण दिनांक चाहते हैं तो FileAttributeKey.creationDate का उपयोग करें। – biomiker

2

स्विफ्ट 4 में, यदि आप DocumentsDirectory में एक विशिष्ट फ़ाइल के लिए बनाई गई तारीख फ़ाइल में जानना चाहते हैं, तो आप इस विधि का उपयोग कर सकते हैं

func getfileCreatedDate(theFile: String) -> Date { 

     var theCreationDate = Date() 
     do{ 
      let aFileAttributes = try FileManager.default.attributesOfItem(atPath: theFile) as [FileAttributeKey:Any] 
      theCreationDate = aFileAttributes[FileAttributeKey.creationDate] as! Date 

     } catch let theError as Error{ 
      print("file not found \(theError)") 
     } 
     return theCreationDate 
    } 
0

अपडेट किया गया जवाब स्विफ्ट 4 बाहर निकलने के लिए के लिए संशोधित (.modifiedDate) या सृजन (.creationDate) तिथि:

let file: URL = ... 
if let attributes = try? FileManager.default.attributesOfItem(atPath: file.path) as [FileAttributeKey: Any], 
    let creationDate = attributes[FileAttributeKey.creationDate] as? Date { 
    print(creationDate) 
    } 
  1. एक फ़ाइल है कि आप एक URL के माध्यम से अग्रिम में प्रदान का उपयोग करना, यह अपने गुण का अनुरोध करेंगे। यदि सफल होता है [FileAttributeKey: Any] का एक शब्दकोश
  2. चरण 1 से शब्दकोश का उपयोग करके, फिर निर्माण की तारीख (या यदि आप चाहें तो संशोधित) निकालता है और सशर्त अनचाहे का उपयोग करके इसे सफल करता है, तो सफल होने पर इसे
  3. पहले दो चरणों मान लिया जाये कि सफल रहे हैं, अब आप एक तारीख है कि आप के साथ
संबंधित मुद्दे