0

ココア アプリでごみ箱のサイズを int として取得することは可能ですか。NSTaskこれを行う正しい方法はありますか?

4

1 に答える 1

3

これを行う簡単な方法はありません。Mac GUI は統一された Trash を提供しますが、Trash というものは 1 つだけではありません。各ボリュームは個別のごみ箱を持つことができ、ボリュームは行き来することができます。

また、フォルダーの内容のサイズを計算するのは非常に時間がかかる可能性があるため、これはあまり良い考えではないようです。

本当にやりたい場合は、次のようなものを使用してマウントされたすべてのボリュームを列挙し、 を使用して-[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]URL を に変換し、forを渡して使用してボリューム参照番号を取得し、forを渡して各ボリュームのゴミ箱を見つけ、変換します。を使用して結果を URLに変換し、配列を渡すことでその URL のディレクトリ列挙子を作成し、その列挙子を介して各項目を として列挙し、それらのを累積します。FSRefCFURLGetFSRef()FSRefFSGetCatalogInfo()kFSCatInfoVolumewhichInfoFSFindFolder()kTrashFolderTypefolderTypeFSRefCFURLCreateFromFSRef()-[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:NSURLTotalFileAllocatedSizeKeykeysNSURLTotalFileAllocatedSizeKeyNSNumber-unsignedLongLongValueNSNumber

実際には、 forと 1 から始まるインデックスを使用してFSGetVolumeInfo()kFSInvalidVolumeRefNumforを使用してボリュームを列挙する方が簡単な場合があります。あなたも合格するでしょう。インデックスをインクリメントして、返されるまで繰り返します。利点は、ボリューム参照番号が直接得られるため、URL からボリューム参照番号に移動する必要がないことです。欠点は、これがもう 1 つの古いスタイルの API であることです。ただし、上記の代わりになるものがないため、それらの API を使用するしかありません。volumevolumeIndexkFSVolInfoNonewhichInfonsvErrFSRefFSFindFolder()

とにかく、ボリュームを列挙すると、ごみ箱フォルダーを取得するので、ごみ箱フォルダーを持たないボリュームに遭遇する準備をする必要があります。たとえば、ネットワークにマウントされたボリュームは、多くの場合そうではありません。

于 2012-07-07T12:33:56.967 に答える