Tengo un Servicio que crea un nuevo archivo .txt o .rtf. El Servicio guarda este archivo en el disco. El nombre de este archivo es proporcionado por el usuario a través de un cuadro de diálogo de entrada. Sin embargo, he descubierto que si el nombre del archivo contiene una barra inclinada hacia adelante (/
), entonces el archivo no será creado.
Supongamos que me gustaría crear un archivo titulado: Este es mi / archivo.txt.
Puedo crear este archivo manualmente en Finder.app sin errores, lo que indica que el sistema operativo permite barras inclinadas en los nombres de archivos (a diferencia de los dos puntos, por ejemplo).
Este es un código (es decir, un fragmento de mi Servicio) para reproducir el error:
set theCustomFilename to text returned of (display dialog "Introduzca el nombre del archivo:
" default answer "Este es mi /archivo")
set thePath to "/Users/Me/Desktop/"
set theFileExtension to ".txt"
set theCustomFilePathname to thePath & theCustomFilename & theFileExtension
try
set fileHandle to open for access theCustomFilePathname with write permission
write "Este es el texto del documento." to fileHandle
close access fileHandle
on error eStr number eNum
display dialog eStr & " número " & eNum buttons {"OK"} default button 1 with title "Error de E/S de archivo..." with icon caution
try
close access fileHandle
end try
end try
Si ejecutas el código anterior, se te dará el error:
Archivo /Users/Me/Desktop/Este es mi / archivo.txt no se encontró. número -43
0 votos
¿Cómo se supone que AppleScript sabrá cuáles de los
/
entheCustomFilePathname
son separadores de directorio y cuáles son parte de un nombre de carpeta o archivo?0 votos
Eso es correcto. Había simplificado demasiado mi publicación. En mi código real, el nombre de archivo se encuentra en su propia variable. Por favor, revisa mi edición.
0 votos
Esto no cambia el valor de
theCustomFilePathname
una vez que se asigna, ¡ahí todavía tienes el mismo problema :-)0 votos
No entiendo tu comentario. El script podría encontrar todas las instancias de una barra inclinada en el
theCustomFilename
, y luego escapar cada instancia que exista en esta variable, antes de la líneaset theCustomFilePathname to thePath & theCustomFilename & theFileExtension
.0 votos
Estas son solo cadenas, ¿cómo debería saber AppleScript que es una ruta o un nombre de archivo? ¿Y cómo debería saber AppleScript si la parte
Me/Desktop
esDesktop
dentro de una carpetaMe
y no algo llamadoMe/Desktop
?0 votos
Mi publicación no estaba lamentando el hecho de que AppleScript no sepa automáticamente a qué barras inclinadas deben pertenecer a un nombre de archivo. Es, por supuesto, imposible que mi AppleScript sepa esto de forma innata. Estoy tratando de averiguar cómo codificar esto yo mismo. Por ejemplo, una idea podría ser implementar un proceso de búsqueda y reemplazo para encontrar cada carácter de barra inclinada que existe en
theCustomFilename
, y luego reemplazar cada carácter de barra inclinada con una barra inclinada correctamente escapada.0 votos
Relacionado: ¿Cómo puedo escapar una barra diagonal en un nombre de archivo en rsync?