ココア アプリでごみ箱のサイズを int として取得することは可能ですか。NSTask
これを行う正しい方法はありますか?
1 に答える
これを行う簡単な方法はありません。Mac GUI は統一された Trash を提供しますが、Trash というものは 1 つだけではありません。各ボリュームは個別のごみ箱を持つことができ、ボリュームは行き来することができます。
また、フォルダーの内容のサイズを計算するのは非常に時間がかかる可能性があるため、これはあまり良い考えではないようです。
本当にやりたい場合は、次のようなものを使用してマウントされたすべてのボリュームを列挙し、 を使用して-[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
URL を に変換し、forを渡して使用してボリューム参照番号を取得し、forを渡して各ボリュームのゴミ箱を見つけ、変換します。を使用して結果を URLに変換し、配列を渡すことでその URL のディレクトリ列挙子を作成し、その列挙子を介して各項目を として列挙し、それらのを累積します。FSRef
CFURLGetFSRef()
FSRef
FSGetCatalogInfo()
kFSCatInfoVolume
whichInfo
FSFindFolder()
kTrashFolderType
folderType
FSRef
CFURLCreateFromFSRef()
-[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
NSURLTotalFileAllocatedSizeKey
keys
NSURLTotalFileAllocatedSizeKey
NSNumber
-unsignedLongLongValue
NSNumber
実際には、 forと 1 から始まるインデックスを使用してFSGetVolumeInfo()
、kFSInvalidVolumeRefNum
forを使用してボリュームを列挙する方が簡単な場合があります。あなたも合格するでしょう。インデックスをインクリメントして、返されるまで繰り返します。利点は、ボリューム参照番号が直接得られるため、URL からボリューム参照番号に移動する必要がないことです。欠点は、これがもう 1 つの古いスタイルの API であることです。ただし、上記の代わりになるものがないため、それらの API を使用するしかありません。volume
volumeIndex
kFSVolInfoNone
whichInfo
nsvErr
FSRef
FSFindFolder()
とにかく、ボリュームを列挙すると、ごみ箱フォルダーを取得するので、ごみ箱フォルダーを持たないボリュームに遭遇する準備をする必要があります。たとえば、ネットワークにマウントされたボリュームは、多くの場合そうではありません。