2010-08-12 8 views
7

Bien, pensé que esto sería simple, pero aparentemente me falta algo obvio. Mi código es el siguiente:Pruebas de Applescript para la existencia de archivos

set fileTarget to ((path to desktop folder) & "file$") as string 

if file fileTarget exists then 
    display dialog "it exists" 
else 
    display dialog "it does not exist" 
end if 

¿No? Por desgracia, cuando corro el guión que devuelve el error

Can’t get file "OS X:Users:user:Desktop:files$". 

No importa si el archivo existe o no, este es el mismo error que consigo. He intentado una docena de cosas diferentes, pero aún me deja boquiabierto.

Respuesta

13

puedo utilizar esta subrutina para ver si existe un archivo o no:

on FileExists(theFile) -- (String) as Boolean 
    tell application "System Events" 
     if exists file theFile then 
      return true 
     else 
      return false 
     end if 
    end tell 
end FileExists 

Añadir sal al gusto.

4

Es fácil, excepto que "existe" es un Finder o un comando de Eventos del sistema. No es un comando AppleScript recto. Como tal, debe envolverlo en un bloque de código de aplicación tell. FYI: aquí hay otra manera que no requiere una aplicación. Funciona porque cuando forzas una ruta a un "alias" debe existir, de lo contrario, obtienes un error. Entonces podrías hacer lo siguiente.

set fileTarget to (path to desktop folder as text) & "file$" 

try 
    fileTarget as alias 
    display dialog "it exists" 
on error 
    display dialog "it does not exist" 
end try 

NOTA: tiene un error en el código. Está utilizando el operador & para agregar cadenas, pero lo está haciendo mal, aunque la suerte le da la respuesta correcta. Cuando usa el operador &, cada objeto a cada lado del operador debe ser una cadena. "path to desktop folder" no es una cadena, por lo que primero debemos hacer una cadena y luego agregarle la cadena "file $". Así que hacerlo de esta manera ...

set fileTarget to (path to desktop folder as text) & "file$" 
+0

obtuvo el '((ruta a la carpeta de escritorio) y "$ archivo") como cadena ' de mí. Esa es la forma en que lo he estado haciendo durante años y nunca tuve un problema. –

+0

Sí, sé que funciona porque al principio lo hice de esta manera también. Applescript es bueno de esa manera ... ayuda a corregir errores menores. Si observa el resultado de la adición antes de que se fuerce a una cadena, se ve así: "{alias" Macintosh HD: Users: hmcshane: Desktop: "," file $ "}". Es una lista de 2 elementos, por lo que definitivamente no es lo que buscamos. Con suerte, conocer la teoría un poco mejor ayudará con algo más complejo en el futuro que no funciona. – regulus6633

+0

Nunca pensé en eso de esa manera, pero el tuyo es mucho más limpio. Gracias por el consejo. –

0

para evitar error original No se puede obtener archivo "OS X: Usuarios: Usuario: Escritorio: $ archivos". simplemente añadir al bloque tell guión tell application "Finder" conjunto fileTarget a ((ruta a la carpeta de escritorio) & "$ archivo") como cadena

si existe el archivo fileTarget continuación diálogo sobre la pantalla "que existe" demás diálogo sobre la pantalla "no existe" final si final dirá

Cuestiones relacionadas