2

次のコードを使用して、ボリュームの空き容量を確認しています。フォルダーは、NSOpenPanel を使用して提供されました。選択したアイテムはマウントされたボリュームであり、返されるパスは \Volumes\Name です

NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder];

unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];    

Cocoa を使用してマウントされたボリュームの空き容量を確認するより良い方法はありますか?

更新: 実際、これはボリュームの空き容量を決定する最良の方法です。機能していないように見えましたが、これは、フォルダーが実際には /Volume/VolumeName ではなく /Volumes であったためです。

4

2 に答える 2

3

提供されたコードは、Cocoa でボリュームの空き容量を判断するための最良の方法です。[NSFileManagerObj fileSystemAttributesAtPath] に指定されたパスに、ボリュームのフル パスが含まれていることを確認してください。ファイルではなくフォルダーが渡されたことを確認するために最後のパス コンポーネントを削除していたため、/Volumes がフォルダーとして使用され、正しい結果が得られませんでした。

NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder];

unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];    
于 2008-11-06T15:39:17.377 に答える
1

statfs は df の結果と一致しています。理論的には NSFileSystemFreeSize は statfs に由来するため、問題は存在しないはずです。

NSFileSystemFreeSize の代わりに、以下のように statfs を実行することをお勧めします。

#include <sys/param.h>
#include <sys/mount.h>

int main()
{
    struct statfs buf;

    int retval = statfs("/Volumes/KINGSTON", &buf);

    printf("KINGSTON Retval: %d, fundamental file system block size %ld, total data blocks %d, total in 512 blocks: %ld\n",
            retval, buf.f_bsize, buf.f_blocks, (buf.f_bsize / 512) * buf.f_blocks); 
    printf("Free 512 blocks: %ld\n",  (buf.f_bsize / 512) * buf.f_bfree); 
    exit(0);
}
于 2008-11-05T06:38:00.153 に答える