我想我希望能够找到任何存储空间,而不仅仅是系统磁盘,但这是最重要的。
答案 0 :(得分:14)
答案 1 :(得分:10)
修改强> fileSystemAttributesAtPath:不推荐使用,使用attributesOfFileSystemForPath:error:如NSD建议的那样。当我认为它不起作用时,我犯了一个错误。
// this works
NSError *error = nil;
NSDictionary *attr = [NSFM attributesOfFileSystemForPath:@"/" error:&error];
if (!error) {
double bytesFree = [[attr objectForKey:NSFileSystemFreeSize] doubleValue];
}
我试过这个,attributesOfItemAtPath:错误但是返回的dict似乎没有NSFileSystemFreeNodes键。
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error = nil;
NSDictionary *attr = [fm attributesOfItemAtPath:@"/" error:&error];
if (!error) {
NSLog(@"Attr: %@", attr);
}
2009-10-28 17:21:11.936 MyApp[33149:a0b] Attr: {
NSFileCreationDate = "2009-08-28 15:37:03 -0400";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 80;
NSFileGroupOwnerAccountName = admin;
NSFileModificationDate = "2009-10-28 15:22:15 -0400";
NSFileOwnerAccountID = 0;
NSFileOwnerAccountName = root;
NSFilePosixPermissions = 1021;
NSFileReferenceCount = 40;
NSFileSize = 1428;
NSFileSystemFileNumber = 2;
NSFileSystemNumber = 234881026;
NSFileType = NSFileTypeDirectory;
}
在looking around a bit之后,似乎fileSystemAttributesAtPath:是返回它的方法。怪异。
NSFileManager *fm = [NSFileManager defaultManager];
NSDictionary *attr = [fm fileSystemAttributesAtPath:@"/"];
NSLog(@"Attr: %@", attr);
2009-10-28 17:24:07.993 MyApp[33283:a0b] Attr: {
NSFileSystemFreeNodes = 5027061;
NSFileSystemFreeSize = 20590841856;
NSFileSystemNodes = 69697534;
NSFileSystemNumber = 234881026;
NSFileSystemSize = 285481107456;
}
答案 2 :(得分:8)
我用这个:
NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/"
error:&error];
unsigned long long freeSpace = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];
NSLog(@"free disk space: %dGB", (int)(freeSpace / 1073741824));
答案 3 :(得分:1)
通过swift,您可以使用此功能获得可用空间
account_activation'
test/mailers/user_mailer_test.rb:9:in
答案 4 :(得分:0)
从this post获取
- (uint64_t)freeDiskspace
{
uint64_t totalSpace = 0;
uint64_t totalFreeSpace = 0;
__autoreleasing NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];
if (dictionary) {
NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize];
NSNumber *freeFileSystemSizeInBytes = [dictionary objectForKey:NSFileSystemFreeSize];
totalSpace = [fileSystemSizeInBytes unsignedLongLongValue];
totalFreeSpace = [freeFileSystemSizeInBytes unsignedLongLongValue];
NSLog(@"Memory Capacity of %llu MiB with %llu MiB Free memory available.", ((totalSpace/1024ll)/1024ll), ((totalFreeSpace/1024ll)/1024ll));
} else {
NSLog(@"Error Obtaining System Memory Info: Domain = %@, Code = %d", [error domain], [error code]);
}
return totalFreeSpace;
}
主要区别在于您应该使用NSSearchPathForDirectioriesInDomains,否则我在模拟器上获得了正确的值,但是在设备'/'文件夹引用中返回了190MB这样的东西,这是不正确的。
答案 5 :(得分:-1)
硬盘设备制造商,使用:
1GB = 1000MB
1MB = 1000 KB 等
如果你看到Windows中的8GB USB记忆棒总是显示比实际更小的空间(如7,8 GB),因为它被认为是1 GB = 1024 MB)。在OSX中,相同的USB记忆棒是8GB(真实的)。
所以(freeSpace / 1073741824)
必须是(freeSpace / 1000000000)
至少在OSX中