Получить дату создания файла или изменения даты
Я использую этот кусок кода, чтобы попытаться получить последнюю измененную дату файла:
NSError *error = nil;
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath: myFilePath error:&error];
if (attributes != nil) {
NSDate *date = (NSDate*)[attributes objectForKey: NSFileModificationDate];
NSLog(@"Date modiifed: %@", [date description]);
}
else {
NSLog(@"Not found");
}
Это хорошо работает для файлов в основном пакете, но не в том случае, если файл находится в подкаталоге папки документа приложения, с myFilePath
следующим образом:
/Users/User/Library/Application Support/iPhone Simulator/6.0/Applications/The App ID Number/Documents/mySubdirectory/My Saved File
Он продолжает возвращать "не найден".
Я знаю, что файл есть, так как я могу просмотреть его с помощью finder. Я также попытался удалить пробелы в имени файла, но это не повлияло.
В журнале ошибок нет такого файла или каталога, поэтому, похоже, что-то не так, если я попытался скопировать файл в каталог документа.
Странно, итерация через подкаталог документа с помощью contentsOfDirectoryAtPath
показывает файл как присутствующий.
Я пробовал жестко кодировать путь и извлекать его программно, используя:
*myFolder = [documentsDirectory stringByAppendingPathComponent:@"myFolder"];
*myFilePath = [myFolder stringByAppendingPathComponent:theFileName];
Кто-нибудь может увидеть, где я ошибаюсь?
Ответы
Ответ 1
Попробуйте это. У меня была такая же проблема и я решил что-то вроде следующего:
NSURL *fileUrl = [NSURL fileURLWithPath:myFilePath];
NSDate *fileDate;
[fileUrl getResourceValue:&fileDate forKey:NSURLContentModificationDateKey error:&error];
if (!error)
{
//here you should be able to read valid date from fileDate variable
}
надеюсь, что это помогло;)
Ответ 2
Решение Swift 3:
func fileModificationDate(url: URL) -> Date? {
do {
let attr = try FileManager.default.attributesOfItem(atPath: url.path)
return attr[FileAttributeKey.modificationDate] as? Date
} catch {
return nil
}
}
Ответ 3
Вот быстрое решение @zvjerka24:
func lastModified(path: String) -> NSDate? {
let fileUrl = NSURL(fileURLWithPath: path)
var modified: AnyObject?
do {
try fileUrl.getResourceValue(&modified, forKey: NSURLContentModificationDateKey)
return modified as? NSDate
} catch let error as NSError {
print("\(#function) Error: \(error)")
return nil
}
}
Ответ 4
Если вы получите сообщение об ошибке:
"CFURLCopyResourcePropertyForKey потерпел неудачу, потому что был передан этот URL, у которого нет схемы"
Вы можете попытаться решить эту проблему, добавив файл "file:///" в свой путь к файлу NSString, прежде чем преобразовать его в NSURL, он работал в моем случае.
Ответ 5
Можно также:
NSURL* file = ...
NSError* error;`
NSDate *creationDate = [[NSFileManager defaultManager] attributesOfItemAtPath:file.path error:&error].fileCreationDate;