[英]Retrieve Trash size as an int in cocoa app
可可應用程序是否有可能以int形式獲取垃圾的大小。 NSTask
是執行此NSTask
的正確方法嗎?
沒有簡單的方法可以做到這一點。 盡管Mac GUI提供了統一的廢紙,,但不僅僅是一件事就是廢紙one。 每個卷可以有一個單獨的垃圾,卷可以來回移動。
另外,計算文件夾內容的大小可能會非常耗時,因此這似乎不是一個好主意。
如果你真的想這樣做,你會枚舉所有使用類似的已安裝卷-[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
,轉換網址FSRef
S使用CFURLGetFSRef()
您可以通過卷參考號碼FSRef
使用FSGetCatalogInfo()
傳遞kFSCatInfoVolume
為whichInfo
,找到使用每個卷的垃圾箱FSFindFolder()
傳遞kTrashFolderType
為folderType
,得到的轉換FSRef
到使用URL CFURLCreateFromFSRef()
創建一個目錄枚舉使用該URL -[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
在keys
數組中傳遞NSURLTotalFileAllocatedSizeKey
,通過該枚舉器枚舉,將每一項的NSURLTotalFileAllocatedSizeKey
作為NSNumber
,並累積這些NSNumber
的-unsignedLongLongValue
。
它實際上可能是更容易使用枚舉的卷FSGetVolumeInfo()
傳遞kFSInvalidVolumeRefNum
為volume
和索引從1開始,對於volumeIndex
。 您還kFSVolInfoNone
為whichInfo
傳遞whichInfo
。 您將增加索引並重復直到它返回nsvErr
。 優點是,這可以直接為您提供卷參考號,因此您不必從URL到FSRef
到卷參考號。 缺點是這是另一種舊式API。 但是,您別無選擇,只能使用這些API,因為上述內容無法替代FSFindFolder()
。
無論如何,當您枚舉卷獲得其廢紙folders文件夾時,您必須准備好遇到沒有廢紙folders文件夾的卷。 例如,網絡安裝的卷通常沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.