我使用以下代码确定卷上的可用空间。 该文件夹是使用NSOpenPanel提供的。所选项目是已装入的卷,返回的路径为\ Volumes \ Name
NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder];
unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];
使用Cocoa确定已装载卷上的可用空间是否有更好的方法?
更新:这实际上是确定卷上可用空间的最佳方法。它似乎没有用,但这是因为文件夹实际上是/ Volumes而不是/ Volume / VolumeName
答案 0 :(得分:3)
提供的代码是Cocoa中确定卷上可用空间的最佳方式。 只需确保提供给[NSFileManagerObj fileSystemAttributesAtPath]的路径包含卷的完整路径。我正在删除最后一个路径组件,以确保传递文件夹而不是文件,导致/ Volumes被用作不能提供正确结果的文件夹。
NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder];
unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];
答案 1 :(得分:1)
statfs与df的结果一致。理论上NSFileSystemFreeSize来自statfs,所以你的问题不应该存在。
您可能希望运行以下statfs作为NSFileSystemFreeSize的替代:
#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);
}