Получить размер корзины как приложение int в приложении какао
Возможно ли, чтобы приложение какао получало размер мусора как int. Является NSTask
правильный способ сделать это?
1 ответ
Нет простого способа сделать это. Хотя графический интерфейс Mac представляет собой единую корзину, существует не только одна вещь - корзина. Каждый том может иметь отдельный мусор, и тома могут приходить и уходить.
Кроме того, вычисление размера содержимого папки может занять довольно много времени, поэтому это не очень хорошая идея.
Если вы действительно хотите это сделать, перечислите все подключенные тома, используя что-то вроде -[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
, конвертировать URL в FSRef
с помощью CFURLGetFSRef()
получить справочный номер тома из FSRef
с помощью FSGetCatalogInfo()
прохождение kFSCatInfoVolume
за whichInfo
найти корзину для каждого тома, используя FSFindFolder()
прохождение kTrashFolderType
за folderType
конвертировать полученную FSRef
на URL с помощью CFURLCreateFromFSRef()
создайте перечислитель каталогов для этого URL, используя -[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
прохождение NSURLTotalFileAllocatedSizeKey
в keys
массив, перечислить через этот перечислитель, получая каждый элемент NSURLTotalFileAllocatedSizeKey
как NSNumber
и накапливая -unsignedLongLongValue
с тех NSNumber
s.
На самом деле может быть проще перечислить тома, используя FSGetVolumeInfo()
, проходя kFSInvalidVolumeRefNum
за volume
и индекс, начиная с 1, для volumeIndex
, Вы также прошли бы kFSVolInfoNone
за whichInfo
, Вы будете увеличивать индекс и повторять, пока он не вернется nsvErr
, Преимущество заключается в том, что это дает вам номер ссылки объема, чтобы вам не приходилось переходить от URL к FSRef
на номер ссылки. Недостатком является то, что это еще один API старого стиля. Тем не менее, у вас нет выбора, кроме как использовать эти API, потому что ничто не заменит FSFindFolder()
в выше.
В любом случае, когда вы перебираете тома, получаете их папки для мусора, вы должны быть готовы встретиться с томами, у которых нет папок для мусора. Например, сетевые тома часто этого не делают.