2016-11-16 7 views
2

Я довольно новичок в Swift, и я пытаюсь выполнить проверку даты создания файла.Swift3.0 fileAttributes вызывает ошибку «нет такого файла» в существующем файле

Идея состоит в том, чтобы проверить, был ли файл создан более 7 дней назад. По какой-то причине код всегда возвращает ошибку «нет такого файла».

Чтобы проверить, что не так, я использовал один и тот же путь для чтения содержимого файла в той же функции и работает безупречно.

Я неправильно использую путь или неправильно понял?

func creationDateCheck(name: String) -> Bool { 
    // This is the path I am using, file is in the favorites folder in the .documentsDirectory 
    let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
    let myFilesPath = documentsUrl.appendingPathComponent("favorites/" + name + ".xml") 
    let pathString = "\(myFilesPath)" 

    //First do block tries to get the file attributes and fails 
    do { 
     let fileAttributes = try FileManager.default.attributesOfItem(atPath: pathString) 
     print(fileAttributes) 
     let creationDate = (fileAttributes[FileAttributeKey.creationDate] as? NSDate)! 

     return daysBetweenDates(endDate: creationDate as Date) > 7 

    } catch let error as NSError { 

     print(error.localizedDescription) 
    } 

    // Second do block reads from file successfully using the same path 
    do { 
     print(try String(contentsOf: myFilesPath, encoding: String.Encoding.utf8)) 
    }catch {print("***** ERROR READING FROM FILE *****")} 

    return false 
} 

ответ

4

Вы не можете получить String от URL непосредственно с помощью "\(myFilesPath)" вместо того, что вам нужно использовать path свойство URL.

let fileAttributes = try FileManager.default.attributesOfItem(atPath: myFilesPath.path) 

Причина вы читаете содержимое файла успешно является то, что вы использовали String(contentsOf:encoding:) и он будет принимать URL объект в качестве первого параметра.