Сортировка файлов и папок в каталоге документов по размеру в Swift iOS - PullRequest
1 голос
/ 01 апреля 2019

Я пытался отсортировать мои файлы и папки, хранящиеся в папке с документами, в соответствии с Размер . Я отсортировал файлы w.r.t Date с помощью URLResourceKey и свойств и попытался использовать один и тот же код для размера.

Но поскольку размер в формате Int , сравнение невозможно выполнить с помощью следующего кода!

func filesSortedListDate(atPath: URL) -> [String]?
    {      
        var fileNames = [String]()
        let keys = [URLResourceKey.contentModificationDateKey]

        guard let fullPaths = try? FileManager.default.contentsOfDirectory(at: atPath, includingPropertiesForKeys:keys, options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles) else
        {
            return [""]
        }

        let orderedFullPaths = fullPaths.sorted(by: { (url1: URL, url2: URL) -> Bool in
            do {
                let values1 = try url1.resourceValues(forKeys: [.creationDateKey, .contentModificationDateKey])
                let values2 = try url2.resourceValues(forKeys: [.creationDateKey, .contentModificationDateKey])

                if let date1 = values1.creationDate, let date2 = values2.creationDate {
                    return date1.compare(date2) == ComparisonResult.orderedDescending
                }
            } catch _{

            }
            return true
        })

        for fileName in orderedFullPaths
        {
            do {
                let values = try fileName.resourceValues(forKeys: [.creationDateKey, .contentModificationDateKey])
                if let date = values.creationDate{
                    //let date : Date? = values.contentModificationDate

                    print(fileName)
                    let theFileName = fileName.lastPathComponent
                    fileNames.append(theFileName)
                }
            }
            catch _{

            }
        }
        return fileNames
    }

Пожалуйста, помогите

1 Ответ

1 голос
/ 01 апреля 2019

Внутри блока do-catch вы можете получить size и вернуться в порядке ascending или descending, как показано ниже,

do {
    let size1 = try url1?.resourceValues(forKeys: [.fileSizeKey]).fileSize ?? 0
    let size2 = try url2?.resourceValues(forKeys: [.fileSizeKey]).fileSize ?? 0
    return size1 > size2
} catch {
    print(error.localizedDescription)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...