2009-12-18 11 views

Respuesta

4

Desde OS X 10.6 se puede utilizar NSUrl 's writeBookmarkData:toURL:options:error: método

Desde el documentation:

crea un archivo de alias en disco en una ubicación especificada con datos de marcadores especificados.

Código de ejemplo:

NSURL *originalUrl = [NSURL fileURLWithPath:@"/this/is/your/path"]; 
NSURL *aliasUrl = [NSURL fileURLWithPath:@"/your/alias/path"]; 
NSData *bookmarkData = [originalUrl bookmarkDataWithOptions: NSURLBookmarkCreationSuitableForBookmarkFile includingResourceValuesForKeys:nil relativeToURL:nil error:NULL]; 

if(bookmarkData != nil) { 
    BOOL success = [NSURL writeBookmarkData:bookmarkData toURL:aliasUrl options:NSURLBookmarkCreationSuitableForBookmarkFile error:NULL]; 
    if(NO == success) { 
     //error 
    } 
} 

Sin embargo, los alias creados de esta manera no son compatibles con versiones anteriores de versiones del sistema operativo anterior X (pre 10,6)

+0

Como estaba interesado, al menos, en OS X 10.6, esta es la respuesta que estaba buscando. No hay nada de malo con el código de carbono en una aplicación Cocoa, pero prefiero usar Cocoa, cuando sea posible. – kiamlaluno

+0

Mejor tarde que nunca, ¿verdad? :-) – codingFriend1

+0

Sí, eso es correcto. ':)' – kiamlaluno

-1

Quiere -[NSFileManager linkItemAtPath:toPath:error:]. AFIK, él y sus métodos relacionados son los medios preferidos en todas las versiones.

+2

¿No es un alias diferente de un enlace? Creo que leí un alias de Finder como algunas características que no están presentes en un enlace, lo que lo haría preferible a los enlaces. – kiamlaluno

+1

Los enlaces duros (como el creado con la función informada) no pueden crearse en un volumen que es diferente del de origen. Un alias de Finder en una mezcla entre un enlace suave y un enlace fijo, lo que significa que un alias de Finder sería válido incluso cuando se mueve el archivo, y es posible establecer un alias en un volumen diferente al volumen de origen. – kiamlaluno

+1

Un enlace fijo es * nada * como un alias. El enlace duro de un archivo lo coloca en dos lugares o bajo dos nombres diferentes (o ambos) a la vez. No crea un nuevo archivo de un tipo especial (enlace simbólico) o con contenido especial (alias o marcador). –

4

Eche un vistazo a How to Create an Alias Programmatically.

- (void)makeAliasToFolder:(NSString *)destFolder inFolder:(NSString *)parentFolder withName:(NSString *)name 
{ 
    // Create a resource file for the alias. 
    FSRef parentRef; 
    CFURLGetFSRef((CFURLRef)[NSURL fileURLWithPath:parentFolder], &parentRef); 
    HFSUniStr255 aliasName; 
    FSGetHFSUniStrFromString((CFStringRef)name, &aliasName); 
    FSRef aliasRef; 
    FSCreateResFile(&parentRef, aliasName.length, aliasName.unicode, 0, NULL, &aliasRef, NULL); 

    // Construct alias data to write to resource fork. 
    FSRef targetRef; 
    CFURLGetFSRef((CFURLRef)[NSURL fileURLWithPath:destFolder], &targetRef); 
    AliasHandle aliasHandle = NULL; 
    FSNewAlias(NULL, &targetRef, &aliasHandle); 

    // Add the alias data to the resource fork and close it. 
    ResFileRefNum fileReference = FSOpenResFile(&aliasRef, fsRdWrPerm); 
    UseResFile(fileReference); 
    AddResource((Handle)aliasHandle, 'alis', 0, NULL); 
    CloseResFile(fileReference); 

    // Update finder info. 
    FSCatalogInfo catalogInfo; 
    FSGetCatalogInfo(&aliasRef, kFSCatInfoFinderInfo, &catalogInfo, NULL, NULL, NULL); 
    FileInfo *theFileInfo = (FileInfo*)(&catalogInfo.finderInfo); 
    theFileInfo->finderFlags |= kIsAlias; // Set the alias bit. 
    theFileInfo->finderFlags &= ~kHasBeenInited; // Clear the inited bit to tell Finder to recheck the file. 
    theFileInfo->fileType = kContainerFolderAliasType; 
    FSSetCatalogInfo(&aliasRef, kFSCatInfoFinderInfo, &catalogInfo); 
} 

También puede utilizar AppleScript

osascript -e 'tell application "Finder" to make alias file to POSIX file "/Applications/myapp.app" at POSIX file "/Applications/"' 
+0

También puede consultar la [biblioteca de BDAlias] (https://github.com/rentzsch/bdalias). –

+0

Debe tenerse en cuenta que esta solución es la forma obsoleta (obsoleta). Úselo solo si debe, y use 'writeBookmarkData' si puede. Consulte http://stackoverflow.com/questions/37309635/ para obtener información sobre cómo crear un archivo de marcador a partir de un registro de Alias. –

0

crea un archivo de alias en el disco a la especificada ubicación con datos de marcadores especificados usando Swift3.

Código de ejemplo:

let url = URL(string: "originalURL") 
let aliasUrl = URL(string: "aliasURL") 
do{ 
     let data = try url.bookmarkData(options: .suitableForBookmarkFile, includingResourceValuesForKeys: nil, relativeTo: nil) 
      try URL.writeBookmarkData(data, to: aliasUrl) 
    }catch{} 
Cuestiones relacionadas