我想我能够找出任何存储,而不仅仅是系统磁盘,但这是最重要的。如何找到Cocoa剩下多少磁盘空间?
回答
编辑 fileSystemAttributesAtPath:已过时,使用attributesOfFileSystemForPath:错误:为NSD建议。当我认为它不起作用时,我犯了一个错误。
// this works
NSError *error = nil;
NSDictionary *attr = [NSFM attributesOfFileSystemForPath:@"/" error:&error];
if (!error) {
double bytesFree = [[attr objectForKey:NSFileSystemFreeSize] doubleValue];
}
我想这一点,attributesOfItemAtPath:错误,但字典返回似乎不具备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;
}
“...使用attributesOfFileSystemForPath:error:instead。”这就是NSD的建议,并且你告诉他它不起作用。它现在工作吗? – 2010-01-20 20:47:18
是的,它的确如此。看起来我以前犯过一个错误。 – zekel 2010-01-20 22:09:11
两个批评:'错误:'参数需要一个指向对象的指针,'NSError **'。因此,正确的空指针常量不是“nil”(它可能是指向对象的指针,或者是“
我用这个:
NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/"
error:&error];
unsigned long long freeSpace = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];
NSLog(@"free disk space: %dGB", (int)(freeSpace/1073741824));
硬盘设备制造商,使用:
1GB = 1000MB
1MB = 1000 KB 等
如果你看到Windows中的8GB USB记忆棒总是显示比真实(如7.8 GB)更小的空间,因为它被认为是1GB = 1024MB)。在OSX中,相同的USB存储棒是8GB(实际)。
所以(freeSpace/1073741824)
必须(freeSpace/1000000000)
至少在OSX
对于谁有downvote,我邀请看giga,mega等的意思的希腊词汇。 – Mike97 2016-04-22 16:15:01
您的答案是好的和可能有用的琐事,但它不回答被问到的问题。 – 2016-05-08 19:47:26
谢谢迈克尔,我对此很满意(即如果我的评论是OT),但不幸的是,如果你考虑可可标签+硬盘,这里的答案只是错误。我的回答隐含地包含了对已经发布的代码的更正(这应该是好的,因为这不是一种改进,而是一种修正)。所以如果你找不到剩下的正确空间,你必须使用1000的倍数而不是1024,否则结果将会不正确,也是因为可可已经在使用它。 – Mike97 2016-05-09 11:33:56
从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这是不正确的。不与关键NSFileSystemFreeSize在它返回一个字典[:错误的NSFileManager attributesOfFileSystemForPath] -
通过SWIFT,您可以使用此功能
func getFreeSpace() -> CGFloat {
do {
let fileAttributes = try NSFileManager.defaultManager().attributesOfFileSystemForPath("/")
if let size = fileAttributes[NSFileSystemFreeSize] as? CGFloat {
return size
}
} catch { }
return 0
}
请勿使用相同的内容发布多个答案。你已经在这里发布了http://stackoverflow.com/a/36654477/1743880。发布一个很好的答案并将另一个标记为重复。 – Tunaki 2016-04-15 18:35:56
- 1. 如何查找使用Java留下了多少磁盘空间?
- 2. 服务器中缺少磁盘空间
- 3. TFS 2015 - 磁盘空间持续减少
- 4. 什么是unix命令来查看有多少磁盘空间以及剩余多少?
- 5. iPhone上的应用程序有多少磁盘空间可用?
- 6. 做Mongo索引时使用多少磁盘空间会增加?
- 7. 我的媒体网站需要多少磁盘空间?
- 8. 广告磁盘空间vs实际磁盘空间
- 9. 使用Python在Android上计算剩余磁盘空间
- 10. 虚拟机增加磁盘空间并达到磁盘空间不足问题
- 11. MongoDb:避免过多的磁盘空间
- 12. 表使用过多的磁盘空间
- 13. 乔达时间如何计算剩下多少时间?
- 14. 如何检查可用磁盘空间?
- 15. 如何确定一个表在ASE中使用多少磁盘空间
- 16. KahaDB错误“磁盘上没有剩余空间”。如何解决这个问题?
- 17. 文件名的长度如何影响磁盘上剩余的存储空间?
- 18. OpenFeint磁盘空间占用空间
- 19. 清除MySQL磁盘空间
- 20. 扩展磁盘空间EC2
- 21. 分析SVN磁盘空间
- 22. Eclipse .metadata \ .plugins磁盘空间
- 23. iPhone:可用磁盘空间
- 24. MongoDB磁盘空间回收
- 25. Solr保留磁盘空间
- 26. Kamon,Statsd,Grafana磁盘空间
- 27. 如何查找最高磁盘空间使用量安装?
- 28. 我如何找出iphone的磁盘空间?
- 29. 如何在Windows机器上使用perl查找磁盘空间?
- 30. 我如何找出多少个字符适合在TextBox的剩余空间?
获得免费空间。 – zekel 2009-10-28 21:26:48
哎呀,你是对的。看起来我在课上试过,而不是实例。 – zekel 2010-01-20 22:06:12
嗨,如果路径中的某个子文件夹指向另一个文件系统,NSFileManager是否知道在检索属性时忽略它? – Zohar81 2018-01-18 10:12:43