J'essaie de trouver la date de création (PAS la date de modification) d'un fichier.
La date de création ne semble pas être dans les attributs d'un fichier, bien que la date de modification soit.
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;
}
Cela renvoie toujours zéro. La saisie de "po attrs" dans le débogueur pour obtenir la liste des paires clé/valeur dans NSDictionary renvoie ce qui suit.
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;
Aucune date de création .. bah ..
Quelqu'un connaît-il un autre moyen d'obtenir la date de création ou n'existe-t-il tout simplement pas dans iOS?
Ce code me renvoie en fait la bonne date de création:
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");
}
Créez-vous le fichier dans l'application? C'est peut-être là que réside le problème.
Il y a un message spécial fileCreationDate
pour cela dans NSDictionary
. Ce qui suit fonctionne pour moi:
Objectif-C:
NSDate *date = [attrs fileCreationDate];
Swift:
let attrs = try NSFileManager.defaultManager().attributesOfItemAtPath(path) as NSDictionary
attrs.fileCreationDate()
Version 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)
}
Dans Swift 4, si vous voulez connaître la date de création du fichier pour 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];
}
C'est ici
Réponse mise à jour pour Swift 4 pour retirer la modification (.modifiedDate
) ou la création (.creationDate
) Date:
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)
}
Code de version 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)")
}
Peux tu utiliser fstat64
pour obtenir le st_birthtimespec
membre de la structure retournée? Vous devrez créer un descripteur de fichier C pour le fichier et convertir la valeur timespec
en NSDate
, mais c'est mieux que rien.
Dans Swift 5:
let date = (try? FileManager.default.attributesOfItem(atPath: path))?[.creationDate] as? Date