¿Cuál es el código necesario para crear un alias de Finder desde una aplicación Cocoa? ¿Hay alguna diferencia para ese código entre OS X 10.5, 10.6 y 10.7?¿Cómo creo un alias de Finder dentro de una aplicación?
Respuesta
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)
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
Mejor tarde que nunca, ¿verdad? :-) – codingFriend1
Sí, eso es correcto. ':)' – kiamlaluno
Quiere -[NSFileManager linkItemAtPath:toPath:error:]
. AFIK, él y sus métodos relacionados son los medios preferidos en todas las versiones.
¿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
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
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). –
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/"'
También puede consultar la [biblioteca de BDAlias] (https://github.com/rentzsch/bdalias). –
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. –
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{}
- 1. ¿Cómo creo un alias de Bash?
- 2. ¿Cómo creo un alias de buscador de Macintosh desde la línea de comandos?
- 3. ¿Cómo creo un estilo dentro de un UserControl de WPF?
- 4. ¿Cómo creo un paquete 'instalar' para una aplicación Qt?
- 5. Agregar elemento al Finder Barra lateral
- 6. Applescript: abra una carpeta en Finder
- 7. ¿Cómo se puede relanzar un Finder programáticamente?
- 8. ¿Configura apache para alias una aplicación nodejs?
- 9. ¿Cómo incluyo una variable de entorno dentro de un alias para bash?
- 10. ¿Cómo creo programáticamente un formulario de Windows?
- 11. ¿Cómo creo programáticamente un nuevo KeyStore?
- 12. Drupal: ¿Cómo creo programáticamente un alias de URL para un nodo que ya tiene un alias en el nodo de guardar?
- 13. Cómo definir un alias para una propiedad
- 14. T-SQL: Cómo creo una función "privada" dentro de un procedimiento almacenado
- 15. ¿Cómo creo una instancia de una clase en una aplicación ASP.NET?
- 16. ¿Cómo creo una relación de ActiveRecord con un objeto ActiveResource?
- 17. ¿Cómo creo un ImageView en código Java, dentro de un Layout existente?
- 18. Escribir una consola dentro de una aplicación
- 19. ¿Cómo creo un UIViewController programáticamente?
- 20. ¿Cómo creo una página 404?
- 21. ¿Cómo creo un script de configuración?
- 22. Guardar contraseñas dentro de una aplicación
- 23. ¿Cómo creo una ventana de Cocoa programáticamente?
- 24. ¿Cómo creo un entorno limitado de Java?
- 25. ¿Cómo creo un contenedor de esquina redondeada de WPF?
- 26. Subdirectorios dentro de una aplicación de iOS
- 27. ¿Cómo creo una matriz de botones C#?
- 28. ¿Cómo creo un "complemento de licencias" para mi aplicación de Android?
- 29. ¿Cómo creo un plugin de joomla simple?
- 30. Abrir una aplicación dentro de un formulario - C# o VB.NET
Una forma de hacerlo es incorporar algunos de AppleScript en su aplicación, esto tiene funciones para hacer eso. Consulte los documentos. – Cocoadelica