Question

Je suis en train de trouver la date de création (pas de date de modification) d'un fichier.

Date de création ne semble pas être dans les attributs d'un fichier, bien que la date de modification est.

J'utilise ce code ..

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

retourne toujours nul. Taper « po » attrs dans le débogueur pour obtenir la liste des paires clé / valeur dans le NSDictionary renvoie les éléments suivants ..

  

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

Pas de date de création .. .. bah

Quelqu'un sait une autre façon d'obtenir la date de création ou est-il tout simplement pas exister dans iOS?

Était-ce utile?

La solution

Ce code renvoie en fait la bonne date de création pour moi:

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

Vous créez le fichier dans l'App? Peut-être est là le problème.

Autres conseils

Il y a un message spécial fileCreationDate pour que NSDictionary. Les travaux suivants pour moi:

Objective-C:

NSDate *date = [attrs fileCreationDate];

Swift:

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

Version 2.0 Swift:

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

Dans Swift 4, si vous voulez connaître le fichier date de création d'un fichier spécifique dans documentsDirectory, vous pouvez utiliser cette méthode

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

Swift 3 Code version:

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

réponse Mise à jour Swift 4 pour retirer la date de modification (.modifiedDate) ou la création (.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. L'utilisation d'un fichier que vous fournissez à l'avance via une URL, il demandera ses attributs. En cas de succès un dictionnaire de [FileAttributeKey: Tout] est retourné
  2. Utiliser le dictionnaire de l'étape 1, il tire ensuite la date de création (ou Modified si vous préférez) et en utilisant le Déballer conditionnel, il cède à une date en cas de succès
  3. En supposant que les deux premières étapes avec succès, vous avez maintenant une date que vous pouvez travailler avec

Pouvez-vous utiliser fstat64 pour obtenir le membre de st_birthtimespec du retour struct? Vous devrez créer un descripteur de fichier C pour le fichier et convertir la valeur timespec dans un NSDate, mais qui est mieux que rien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top