Подтвердить что ты не робот

Получить дату создания файла или изменения даты

Я использую этот кусок кода, чтобы попытаться получить последнюю измененную дату файла:

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

Кто-нибудь может увидеть, где я ошибаюсь?

4b9b3361

Ответ 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;