2012-03-04 11 views

Respuesta

30

Si desea que la ruta de acceso a directorio de inicio real del usuario que puede utilizar:

char *realHome = getpwuid(getuid())->pw_dir; 

ejemplo completo:

#include <unistd.h> 
#include <sys/types.h> 
#include <pwd.h> 
#include <assert.h> 

NSString *RealHomeDirectory() { 
    struct passwd *pw = getpwuid(getuid()); 
    assert(pw); 
    return [NSString stringWithUTF8String:pw->pw_dir]; 
} 

Esto le da la rutaa la casa del usuario , pero no le otorga automáticamente acceso a esa carpeta.Como se señaló en los comentarios, puede utilizar esta vía para:

  • proporcionando una carpeta predeterminada cuerdo para el diálogos abrir/guardar
  • detectar si se encuentra en una caja de arena, comparando el resultado con NSHomeDirectory()
+1

Lo único que es realmente bueno es establecer una configuración predeterminada para los diálogos de abrir/guardar archivo. En este momento, si lo configuro en NSHomeDirectory() no es muy fácil de usar. La mayoría de las personas ni siquiera saben qué es la carpeta de la Biblioteca. – Justin808

+1

Ese es un buen uso, otro es probar si estás en la caja de arena comparándolo con lo que 'NSHomeDirectory()' devuelve, y estoy seguro de que hay otros ... – CRD

+0

Y otra más es obtener acceso a un archivo a través de 'com.apple.security.temporary-exception.files.home-relative-path. *' derechos temporales – Dov

10

de Apple documentation:

Acceso a datos de usuario

Mac OS X ruta de investigación API, por encima de la capa POSIX, volver caminos con relación al recipiente en lugar de en relación con el domicilio del usuario directorio. Si su aplicación, antes de sandbox, accede a las ubicaciones en el directorio de inicio real del usuario (~) y está utilizando Cocoa o Core Foundation APIs, luego, después de habilitar sandboxing, su código busca automáticamente el contenedor de su aplicación en lugar.

Para el primer lanzamiento de su aplicación de espacio aislado, Mac OS X automáticamente migra el archivo de preferencias principal de su aplicación. Si su aplicación utiliza archivos adicionales de apoyo, realizar una migración de una sola vez de los archivos en el contenedor , tal como se describe en “Migración de una aplicación a un entorno limitado.”

Si está utilizando un comando de POSIX, como getpwuid para obtener la ruta en el directorio de inicio real del usuario, considere utilizar un símbolo de Fundación central Cocoa o , como la función NSHomeDirectory. Al usar Cocoa o Core Foundation, admite la restricción de App Sandbox para evitar el acceso directo al directorio de inicio del usuario.

Si su aplicación requiere acceso al directorio de inicio del usuario para la función , informe a Apple acerca de sus necesidades utilizando el Apple bug reporting system.

+7

que es ridículo ... pero informativo. Gracias. – Dakine83

0

el uso de Swift, puede acceder a la ruta del directorio a los usuarios a casa de una aplicación de espacio aislado de esta manera:

var userHomeDirectoryPath : String { 
    let pw = getpwuid(getuid()) 
    let home = pw?.pointee.pw_dir 
    let homePath = FileManager.default.string(withFileSystemRepresentation: home!, length: Int(strlen(home))) 

    return homePath 
} 


creé esta manera lution basado en un fragmento en esta publicación de blog: http://zpasternack.org/accessing-the-real-home-folder-from-a-sandboxed-app/

Cuestiones relacionadas