Получить размер корзины как приложение 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с тех NSNumbers.

На самом деле может быть проще перечислить тома, используя FSGetVolumeInfo(), проходя kFSInvalidVolumeRefNum за volume и индекс, начиная с 1, для volumeIndex, Вы также прошли бы kFSVolInfoNone за whichInfo, Вы будете увеличивать индекс и повторять, пока он не вернется nsvErr, Преимущество заключается в том, что это дает вам номер ссылки объема, чтобы вам не приходилось переходить от URL к FSRef на номер ссылки. Недостатком является то, что это еще один API старого стиля. Тем не менее, у вас нет выбора, кроме как использовать эти API, потому что ничто не заменит FSFindFolder() в выше.

В любом случае, когда вы перебираете тома, получаете их папки для мусора, вы должны быть готовы встретиться с томами, у которых нет папок для мусора. Например, сетевые тома часто этого не делают.

Другие вопросы по тегам