سؤال

أحاول العثور على تاريخ الإنشاء (وليس تاريخ التعديل) لملف.

لا يبدو أن تاريخ الإنشاء في سمات الملف ، على الرغم من أن التاريخ المعدل هو.

أنا أستخدم هذا الرمز ..

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

هذا يعود دائما لا شيء. كتابة "po attrs" في مصحح الأخطاء للحصول على قائمة أزواج المفاتيح/القيمة في NSDictionary يعيد ما يلي ..

nsfilegroupownerAccountid = 20 ؛
nsfilegroupownerAccountName = الموظفين ؛
nsfileModificationDate = 2010-01-21 11:47:55 +0000 ؛
nsfileAlnerAccountid = 501 ؛
nsfileAlnerAccountName = ben ؛
nsfileposixpermissions = 420 ؛
nsfilereferenceCount = 1 ؛
nsfilesize = 338 ؛
nsfilesystemfilenber = 2234 ؛
nsfilesystemnumber = 42553324 ؛
nsfiletype = nsfileTyperegular ؛

لا يوجد تاريخ خلق .. باه ..

أي شخص يعرف طريقة أخرى للحصول على تاريخ الخلق أم أنها غير موجودة في نظام التشغيل iOS؟

هل كانت مفيدة؟

المحلول

هذا الرمز يعيد في الواقع تاريخ الإنشاء الجيد لي:

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");
}

هل تقوم بإنشاء الملف داخل التطبيق؟ ربما هذا هو المكان الذي توجد فيه المشكلة.

نصائح أخرى

هناك رسالة خاصة fileCreationDate لذلك في NSDictionary. ما يلي يعمل بالنسبة لي:

ج موضوعية:

NSDate *date = [attrs fileCreationDate];

سويفت:

let attrs = try NSFileManager.defaultManager().attributesOfItemAtPath(path) as NSDictionary
attrs.fileCreationDate()

نسخة سويفت 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)
}

في Swift 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
    }
  NSDate *creationDate = nil;
  if ([fileManager fileExistsAtPath:filePath]) {
       NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
       creationDate = attributes[NSFileCreationDate];
  }

إنه هنا

رمز الإصدار السريع 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)")
    }

إجابة محدثة ل سريع 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: أي
  2. باستخدام القاموس من الخطوة 1 ، يقوم بعد ذلك بسحب تاريخ الإنشاء (أو تعديله إذا كنت تفضل) واستخدام unfectional ، ويعينه إلى تاريخ إذا نجحت
  3. على افتراض أن أول خطوتين ناجحتين ، لديك الآن تاريخ يمكنك العمل معه

هل تستطيع استعمال fstat64 للحصول على st_birthtimespec عضو في الهيكل الذي تم إرجاعه؟ ستحتاج إلى إنشاء مقبض ملف C للملف وتحويل timespec القيمة في NSDate, ، لكن هذا أفضل من لا شيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top