2012-07-22 5 views
5

¿Alguien sabe qué apis Apple está usando para obtener su panel Obtener información para determinar el espacio libre en Lion? Todo el código que he intentado obtener del mismo espacio disponible que informa Apple está fallando, incluso Quick Look no muestra el mismo espacio que muestra Get Info. Esto parece suceder si elimino un grupo de archivos e intento leer el espacio disponible.Cacao apis informando valores incorrectos de espacio libre, ¿qué debo usar?

Incorrect free space on Lion

Cuando uso NSFileManager -> NSFileSystemFreeSize me sale 42918273024 bytes

Cuando uso NSURL -> NSURLVolumeAvailableCapacityKey me sale 42918273024 bytes

Cuando uso statfs -> buffer.f_bsize * búfer .f_bfree obtengo 43180417024 bytes

statfs obtiene resultados similares a Vista rápida, pero ¿cómo puedo obtener información?

+0

Puede ser la diferencia entre los cálculos de base 2 y base 10. Pensé que Apple cambió a la base 10 para el sistema de espacio de almacenamiento en SL, pero no sé por qué más estarían tan lejos. Pueden ser levemente diferentes debido a swap, caches y capturas de pantalla –

+0

No recuerdo la fórmula para convertir entre los dos. –

+1

Mountain Lion agregó NSByteCountFormatter que puede ser de ayuda. ver https://developer.apple.com/library/mac///#/library/mac/documentation/Foundation/Reference/NSByteCountFormatter_Class/Reference/Reference.html –

Respuesta

1

Probablemente esté viendo un resultado de las copias de seguridad de instantáneas locales de Time Machine. Las siguientes citas son de la siguiente artículo de soporte de Apple - OS X Lion: About Time Machine's "local snapshots" on portable Macs:

Time Machine en Mac OS X Lion incluye una nueva característica llamada "locales instantáneas" que mantiene copias de los archivos que usted crea, modifica o elimina el su interior disco. Las instantáneas locales complementan las copias de seguridad regulares de Time Machine (que están almacenadas en su disco externo o Time Capsule) dando a una "red de seguridad" para cuando pueda estar lejos de su disco de copia de seguridad externo y elimine accidentalmente un archivo.

El artículo termina diciendo:

Nota: Usted puede notar una diferencia en las estadísticas de espacio disponible entre la Utilidad de Discos, Finder y Obtener Información de los inspectores. Esto es esperado y se puede ignorar de forma segura. El Finder muestra el espacio disponible en el disco sin tener en cuenta las instantáneas locales, porque instantáneas locales entregarán su espacio en disco si es necesario.

Parece que todos los métodos de programación de medir el espacio disponible en el disco que ha intentado dar el verdadero valor de espacio libre en el disco, no el espacio que puede ser puesto a disposición por la eliminación de las copias de seguridad de Time Machine locales.Dudo que las herramientas de línea de comandos como df hayan tenido conocimiento de las copias de seguridad locales de Time Machine.

0

Esto es un poco de una solución, no una API real, pero el buen comando antiguo de Unix df -H le dará la misma información que en el panel 'obtener información', solo tiene que seleccionar la línea de su disco y analizar la salida.

El programa df tiene muchas otras opciones que puede explorar. En este caso particular, el interruptor -H le dice al programa escupir los números en formato legible para humanos y usar tamaños de base 10.

Echa un vistazo aquí sobre cómo ejecutar líneas de comando desde dentro de una aplicación y obtener la salida dentro de su programa: Execute a terminal command from a Cocoa app

Creo que los fundamentos de ambos df y el panel de obtener información son muy probable que sea el la misma cosa.