Supongo que me gustaría poder buscar cualquier almacenamiento, no solo el disco del sistema, pero eso es lo más importante.¿Cómo se puede encontrar la cantidad de espacio en disco que queda en Cocoa?
Respuesta
EDITAR fileSystemAttributesAtPath: es obsoleto, el uso attributesOfFileSystemForPath: error: como sugiere NSD. Cometí un error cuando pensé que no funcionaba.
// this works
NSError *error = nil;
NSDictionary *attr = [NSFM attributesOfFileSystemForPath:@"/" error:&error];
if (!error) {
double bytesFree = [[attr objectForKey:NSFileSystemFreeSize] doubleValue];
}
yo probamos este, attributesOfItemAtPath: error pero el dict devueltos no parecen tener la clave 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;
}
Después looking around a bit, parece que fileSystemAttributesAtPath: es el método que devuelve. Extraño.
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;
}
"... use attributesOfFileSystemForPath: error: en su lugar." Eso es lo que sugirió NSD, y le dijiste que no funcionaba. ¿Funciona ahora? –
Sí, lo hace. Parece que cometí un error antes. – zekel
Dos críticas: 'error:' los parámetros toman un puntero a un puntero a un objeto, 'NSError **'. Por lo tanto, la constante del puntero nulo correcta no es 'nil' (que sería un puntero a un objeto, ya sea'
utilizo este:
NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/"
error:&error];
unsigned long long freeSpace = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];
NSLog(@"free disk space: %dGB", (int)(freeSpace/1073741824));
fabricantes de dispositivos de disco duro, utilice:
1 GB = 1000 MB
1 MB = 1000 KB etc.
Si ves una memoria USB de 8GB en Windows siempre muestra menos espacio que real (como 7,8 GB) porque se considera 1 GB = 1024 MB). En OSX, el mismo dispositivo USB es de 8 GB (real).
por lo (freeSpace/1073741824)
debe haber (freeSpace/1000000000)
al menos en OSX
Para quienes han votado a favor, los invito a mirar el vocabulario griego para el significado de giga, mega, etc. – Mike97
Su respuesta es trivia buena y potencialmente útil, pero no responde la pregunta que se hizo. –
Gracias Michael, estoy muy bien con esto (es decir, si mi comentario es OT), pero lamentablemente las respuestas aquí fueron simplemente erróneas si se tiene en cuenta la etiqueta de cacao + disco duro. Mi respuesta contiene implícitamente una corrección al código ya publicado (eso debería estar bien ya que no es una mejora sino una corrección). Entonces, si quieres encontrar el espacio correcto, debes usar múltiplo de 1000 en lugar de 1024, de lo contrario el resultado será incorrecto, también porque el cacao ya lo usa. – Mike97
obtener de 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;
}
La principal diferencia es que se debe utilizar NSSearchPathForDirectioriesInDomains, de lo contrario me estaba poniendo valor correcto en el simulador , pero en la carpeta del dispositivo '/' la referencia me devuelve algo así como 190MB que no era correcto.
A través rápida se puede obtener espacio libre mediante el uso de esta función
func getFreeSpace() -> CGFloat {
do {
let fileAttributes = try NSFileManager.defaultManager().attributesOfFileSystemForPath("/")
if let size = fileAttributes[NSFileSystemFreeSize] as? CGFloat {
return size
}
} catch { }
return 0
}
No publiques respuestas múltiples con el mismo contenido. Ya has publicado esto aquí http://stackoverflow.com/a/36654477/1743880. Publique una buena respuesta y marque la otra como duplicada. – Tunaki
- 1. ¿Cómo encontrar cuánto espacio en disco queda con Java?
- 2. Espacio en disco anunciado frente a espacio en disco real
- 3. Base de datos que consume menos espacio en disco
- 4. cómo encontrar el uso de espacio de disco por usuario?
- 5. No queda espacio en Android Emulador
- 6. Mahout se queda sin espacio en el montón
- 7. ¿Qué es el comando Unix para ver cuánto espacio en disco hay y cuánto queda?
- 8. ¿Cómo se puede determinar cuánto espacio en disco está ocupando una determinada tabla MySQL?
- 9. ¿Los índices de base de datos toman la misma cantidad de espacio de disco que los datos de columna?
- 10. Arreglo permanente a la cola: no se puede ver `log/development.log ': No queda espacio en el dispositivo
- 11. libv4l2: error al encenderse: no queda espacio en el dispositivo
- 12. Obtenga espacio de disco disponible en ruby
- 13. ¿Hace que Git consuma menos espacio en disco?
- 14. Buscar espacio en disco libre en python en OS/X
- 15. Espacio libre en disco en una unidad de red en Delphi
- 16. ¿Cómo puedo encontrar la cantidad de elementos en una matriz?
- 17. ¿Cómo encontrar la cantidad de espacio asignada por una llamada a malloc()?
- 18. ¿Cómo averiguar el espacio libre en disco para una ruta determinada en un shell de Linux?
- 19. No se puede encontrar espacio de nombres System.Web.UI.DataVisualization.Charting
- 20. ¿Cómo calcular el espacio libre en el disco?
- 21. sdwebimage: ¿hay un límite en la cantidad de setimageWithUrl que se puede poner en cola?
- 22. consulta SQL suficiente espacio en disco
- 23. ¿Cómo se puede evitar programáticamente Windows desde el disco duro?
- 24. ¿Cómo obtener el espacio en disco en un servidor?
- 25. ¿Existe algún límite en la cantidad de clases que un espacio de nombres puede tener en .net?
- 26. ¿Cómo obtener espacio de disco total disponible en sistemas Posix?
- 27. Espacio en disco hambriento Las bases de datos de NoSQL
- 28. ¿Puede verificar el espacio disponible en el disco duro con Adobe Air?
- 29. LaTeX: Mostrar bloque solo si queda espacio suficiente
- 30. ¿Puedes evitar que la memoria se canse en el disco?
- [NSFileManager attributesOfFileSystemForPath: Error:] no devuelve un diccionario con la clave NSFileSystemFreeSize en ella. – zekel
Whoops, tenías razón. Parece que lo intenté en la clase, no en la instancia. – zekel
Hola, ¿qué ocurre si una de las subcarpetas en la ruta apunta a otro sistema de archivos, sabe NSFileManager que la ignorará al recuperar los atributos? – Zohar81