Recibo el siguiente error cuando intento acceder a varios archivos en un AppleScript. Sin embargo, puedo abrir estos archivos manualmente sin problemas.
No se pudo abrir el documento [nombre de archivo]. No tienes permiso.
He intentado lo siguiente:
Sigo teniendo el problema.
Para agregar más frustración, los archivos no informan el error de manera consistente. A veces recibo el error en un archivo cuando ejecuto el script, ¡pero no la próxima vez!
¿Por qué podría estar recibiendo este error de permisos y de qué otra forma podría solucionarlo?
AppleScript a continuación, si ayuda:
-- prompt for source directory
set srcDirectory to (choose folder)
-- get list of all files in source directory
set allFiles to (list folder srcDirectory without invisibles)
tell application "OmniGraffle"
-- create a new document
set newDocument to (make new document with properties {template:"Single Pixel Grid"})
-- added for debug purposes
delay 5
-- get a reference to the first layer
set destinationLayer to first layer in first canvas of newDocument
-- step through each of the file
repeat with currentFile in allFiles
-- get a reference to the next file
set srcFileString to (srcDirectory as string) & currentFile
set srcFileRef to (open srcFileString)
-- get a reference to the icon
set srcGraphic to first graphic in first layer in first canvas of srcFileRef
-- flip the icon (they're all upside down)
flip srcGraphic over vertically
-- copy the updated source to destination canvas
duplicate srcGraphic to destinationLayer
-- close the source file
close srcFileRef saving no
-- added for debug purposes
delay 5
end repeat
end tell
Este problema se debe al aislamiento de aplicaciones de Apple (en este caso, OmniGraffle). La vista previa no recibe un derecho para acceder al PDF si solo le pasa una cadena para abrirlo. De las notas de lanzamiento de Apple :
Notas de compatibilidad
Al enviar comandos a una aplicación de espacio aislado, como TextEdit en OS X Mountain Lion, los parámetros que se refieren a archivos deben ser de un tipo de archivo explícito y no una cadena simple, o la aplicación de destino no podrá acceder al archivo. Por ejemplo, el archivo "Macintosh HD:Users:me:sample.txt", el archivo POSIX "/Users/me/sample.txt" o el resultado de elegir archivo serían aceptables, pero la cadena "/Users/me/ muestra.txt" no lo haría.
¿Por qué esto a veces funciona? Cuando abre un archivo manualmente, la aplicación conserva el derecho a abrirlo (en Recientes, por ejemplo). Por lo tanto, si prueba cualquier archivo que ya haya abierto, lo más probable es que funcione, pero no funcionará en archivos nuevos.
Para solucionarlo, cambie su código para que lea:
...
set srcFileRef to (open POSIX file srcFileString)
...