iOS: как узнать дату создания файла? - PullRequest
30 голосов
/ 21 января 2010

Я пытаюсь найти дату создания (НЕ дату модификации) файла.

Дата создания не указана в атрибутах файла, хотя дата изменения -. 1003 *

Я использую этот код ..

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 = staff;
NSFileModificationDate = 2010-01-21 11:47:55 +0000;
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = ben;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 338;
NSFileSystemFileNumber = 2234;
NSFileSystemNumber = 42553324;
NSFileType = NSFileTypeRegular;

дата создания отсутствует .. ба ..

Кто-нибудь знает другой способ получения даты создания или его просто нет в iOS?

Ответы [ 8 ]

66 голосов
/ 21 июня 2011

Этот код на самом деле возвращает мне хорошую дату создания:

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

Вы создаете файл внутри приложения? Может быть, в этом проблема.

16 голосов
/ 03 ноября 2011

Для этого в NSDictionary есть специальное сообщение fileCreationDate. У меня работает следующее:

Objective-C:

NSDate *date = [attrs fileCreationDate];

Swift:

let attrs = try NSFileManager.defaultManager().attributesOfItemAtPath(path) as NSDictionary
attrs.fileCreationDate()
7 голосов
/ 13 ноября 2015

Swift 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)
}
4 голосов
/ 28 июня 2017

В 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
    }
3 голосов
/ 20 ноября 2013
  NSDate *creationDate = nil;
  if ([fileManager fileExistsAtPath:filePath]) {
       NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
       creationDate = attributes[NSFileCreationDate];
  }

Его здесь

2 голосов
/ 14 февраля 2017

Код версии Swift 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)")
    }
1 голос
/ 18 декабря 2017

Обновлен ответ для Swift 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. Если первые два шага пройдены успешно, у вас есть дата, с которой вы можете работать
1 голос
/ 21 января 2010

Можете ли вы использовать fstat64, чтобы получить st_birthtimespec член возвращаемой структуры? Вам нужно создать дескриптор файла C для файла и преобразовать значение timespec в NSDate, но это лучше, чем ничего.

...