c++ - una - símbolo de prohibición macbook pro
Cómo encontrar si una unidad montada realmente existe en Mac (2)
Hay un método en NSFileManager
que le permite ver fácilmente los volúmenes montados:
- (NSArray*) mountedVolumeURLsIncludingResourceValuesForKeys:option
- Devuelve una matriz de URL que identifica los volúmenes montados disponibles en la computadora.
Sin embargo, no sé cómo se maneja esto con las monturas paradas. También deberá averiguar si estos volúmenes montados son volúmenes de red o imágenes de disco.
Si desea notificaciones cuando los volúmenes vienen y se van, puede usar la API de eventos del sistema de archivos . Es un nivel un poco más bajo, pero básicamente puedes pedir que me ''notifique cuando cambie la estructura en /Volumes/*
.
Lo que realmente estaba tratando de lograr es averiguar cuándo se desconectó un disco que había montado desde la red. Para lo cual comencé con un enfoque muy simple, utilicé:
boost :: filesystem :: existe
en la ruta montada de la unidad (que podemos encontrar en / Volumes /). por ejemplo, para un disco en la computadora: smb: // XYZ / drive después del montaje, puedo verlo como: / Volumes / drive y el último fue el disco en el que estaba usando boost :: filesystem :: exists,
Así que esperaba que tan pronto como desconectara la red, el volumen montado dentro de / Volumes se borrará inmediatamente y todo funcionará de manera sencilla.
PERO, más tarde me doy cuenta de que en la desconexión de la red, OSX tarda todo el tiempo en borrar la unidad del directorio / Volúmenes.
¿Hay una API de Apple que pueda decir si el volumen total, que aparece en / Volumes es válido o no?
Gracias por adelantado.
Desea las notificaciones de NSWorkspace
:
-
NSWorkspaceDidRenameVolumeNotification
-
NSWorkspaceDidMountNotification
-
NSWorkspaceWillUnmountNotification
-
NSWorkspaceDidUnmountNotification
Las últimas tres notificaciones contienen una clave @"NSDevicePath"
en el diccionario userInfo
. Mientras que WillUnmount
no se envía si el dispositivo se elimina a la fuerza, DidUnmount
sí DidUnmount
hace. Usando una combinación de los dos, puedes obtener una advertencia adecuada para "desmontar bien" los volúmenes de la red para manejar las cosas en un escenario ideal, pero en todos los casos, nunca tuve problemas reales confiando en DidUnmount
para decirme que un volumen desapareció . Utilizo esto en el código de envío en una aplicación que salió desde 2003.