2010-01-21 22 views
26

Bir dosyanın oluşturma tarihini (DEĞİŞTİRME tarihini) bulmaya çalışıyorum.iOS: Bir dosyanın oluşturulma tarihini nasıl buluyorsunuz?

Oluşturulma tarihi, değiştirilme tarihi olmasına rağmen, bir dosyanın özniteliklerinde görünmüyor. Bu kodu kullanıyorum

..

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

Bu her zaman nil döndürür. ayıklayıcıya Yazma 'po attrs' NSDictionary anahtar/değer çiftleri listesini elde etmek için, aşağıdaki ..

NSFileGroupOwnerAccountID = 20 döndürür;
NSFileGroupOwnerAccountName = personel;
NSFileModificationDate = 2010-01-21 11:47:55 +0000;
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = ben;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 338;
NSFileSystemFileNumber = 2234;
NSFileSystemNumber = 42553324;
NSFileType = NSFileTypeRegular;

yok oluşturulma tarihi .. bah

..

Herkes oluşturma tarihini almanın başka bir yolu bilmek ya da sadece iOS içinde yok?

+0

Not çalışabilirsiniz bir tarihi var, başarılıdır. Ancak aynı sorunu gerçek bir cihazda alıyorum - oluşturma tarihi listelenmiyor. –

+1

Belge, NSFileCreationDate değerini döndürülen bir değer olarak listeler, Apple ile bir hatayı dosyalamak isteyebilirsiniz. Bu kesinlikle beklendiği gibi davranmıyor gibi geliyor. –

cevap

61

Bu kod aslında benim için iyi oluşturulma tarihini? Belki sorun budur.

+0

Bu çalışma benim için iyi, Jeff Kelley'in cevabı hala geçerli mi? – bentford

+0

Bu aptal soruyu sorduğumuz için üzgünüm ... "attributesOfItemAtPath: yol" Bu "yol" değişkeni nasıl başlatılır. Projenin köküne yerleştirilmiş "icon_57.png" isimli bir resimim var mı? –

+1

@ jeet.chanchawat Burada bir Swift uygulaması ... ObjC'nin sözdizimini alabilmesi için yeterince kolay olmalı documents dokumanızıString = NSSearchPathForDirectoriesInDomains (.DocumentDirectory, .UserDomainMask, true) [0] return documentsDirectory.stringByAppendingPathComponent ("icon_57.png") – Magoo

1

Döndürülmüş yapının st_birthtimespec üyesini almak için fstat64 kullanabilir misiniz? Dosya için bir C dosyası tanıtıcısı oluşturmanız ve timespec değerini NSDate'a dönüştürmeniz gerekecek, ancak bu hiçbir şeyden daha iyi değil.

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

Eğer App içindeki dosyası oluşturma Are:

+1

Hayır, bildiğim kadarıyla benim iPhone OS işletim sisteminin henüz 64 bit olmadığından fstat64 kullanamamanız gerekir. Ne yazık ki, 32 bit modunda, struct timespec st_birthtimespec struct stat içinde mevcut DEĞİLDİR. Bu nedenle, [attrs fileCreationDate] tarafından döndürülen NSDate nesnesinin, dosya özniteliklerini içeren NSDictionary öğesinin attm olduğu 3.1.2'den itibaren her zaman iPhone'da sıfır olacağının nedeni budur. –

+0

Teşekkürler çocuklar. Dosya oluşturulduğunda ve NSUserDefaults'da saklandığında hatırlamamız gerekecek gibi görünüyor. –

+0

Neden posta urinieto kodunu kullanamıyoruz? – bentford

15

NSDictionary için fileCreationDate özel bir ileti var. Benim için aşağıdaki çalışmaları:

Objective-C:

NSDate *date = [attrs fileCreationDate]; 

Swift:

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

Onun here

7

Swift 2.0 versiyon:

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

Swift 3 versiyon kodu: documentsDirectory belirli bir dosya için tarih oluşturulan dosyayı bilmek istiyorsanız

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

Cevabınızı da açıklayabileceğinizi takdir edin. –

+0

Dosya oluşturma tarihinin OP'ye göre olmasını istiyorsanız FileAttributeKey.creationDate kullanın. – biomiker

2

Swift 4'te, bu yöntemi kullanabilirsiniz

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

Güncelleme cevap Swift 4 modifiye (.modifiedDate) ya da oluşturma (.creationDate) tarihini çekilmem için:

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. Bir URL yoluyla önceden temin dosyayı kullanarak, kendi özelliklerini isteyecektir. Başarılı olursa [FileAttributeKey: Any] sözlüğü döndürülür
  2. 1. adımdaki sözlüğü kullanarak, sonra oluşturma tarihini (veya tercih ederseniz değiştirir) dışarı çeker ve koşullu istemsiz kullanarak, başarılı bir tarih
  3. atar ilk iki adımı varsayarsak
  4. şimdi i gösterdiğin iz iphone simülasyon aracından olduğunu
İlgili konular