¿Por que siempre dice que el archivo existe?

Buenas, estoy escribiendo una aplicación y me he quedado atascado con un pequeño problema. Estoy intentando comprobar que el archivo que se creó en otra parte del código, exista en la ruta donde se creó.
baseDatosCreada es una propiedad pública que recibe como valor el string uno.sqlite

var ruta as FolderItem = SpecialFolder.Documents.child(baseDatosCreada) //baseDatosCreada = uno.sqlite

if ruta.Exists then
  MessageBox "El archivo existe"
end if

Este código está en un botón y cuando pulso, siempre me dice que el archivo existe, aunque lo borre. ¿Que estaré haciendo mal?
Gracias.

Tal vez tu programa está creando el archivo antes de que ejecutes ese código.

Probé con esto (único código) y trabaja correctamente (no tengo el archivo en Documents):

var ruta as FolderItem = SpecialFolder.Documents.child("uno.sqlite") //baseDatosCreada = uno.sqlite

if ruta.Exists then
  MessageBox "El archivo existe"
end if

¿Estás en Windows?
¿Será que tienes una carpeta Documentos y otra Documents (mis documents/my documents), pensando que el archivo que borraste está en una y Xojo busca en la otra carpeta?

1 Like

Probe en un proyecto nuevo y funciona también. En cambio en el otro proyecto no.
He puesto un breackpoint en la línea donde declaro la variable: var ruta as FolderItem… y al pasar a la condición, he mirado los valores en el visor inferior. Entrando en ruta As FolderItem, en el caso del código en un proyecto nuevo, donde funciona bien, el valor de DisplayName es efectivamente uno.sqlite
En cambio, en el proyecto donde no funciona, el valor es Documentos.
Entonces, deduzco que siempre dice que existe el archivo porque lo que está comprobando es que existe la carpeta Documentos. Por algún motivo no busca el archivo.
Saludos.
Por cierto, he mirado lo de tener el archivo en Documents o alguna carpeta duplicada, pero no, estoy en Mac y he buscado en el Finder el archivo después de borrarlo para hacer la prueba y no estaba en el disco duro.

Eso quiere decir que en el programa que no funciona
baseDatosCreada = ""
este código siempre dice que existe porque, como tu viste, se está refiriendo a Documentos

var ruta as FolderItem = SpecialFolder.Documents.child("") 
if ruta.Exists then
  MessageBox "El archivo existe"
end if
1 Like

Bueno, no importa, he conseguido arreglarlo de otra forma. En vez de hacer la comprobación en el botón a parte, lo hago en el código donde genero la base de datos y está funcionando bien. Lo dejaré así. Saludos y gracias por la ayuda.

Proba:

var ruta as FolderItem = SpecialFolder.Documents.child(baseDatosCreada) //baseDatosCreada = uno.sqlite

if ruta <> nil and ruta.Exists then
  MessageBox "El archivo existe"
end if
1 Like

Gracias Michel, lo he probado y sigue haciendo lo mismo. Pero no importa, lo he solucionado de otra forma. Saludos y gracias.

baseDatosCreada ¿es un String? Creo que los String no pueden ser nil por lo que el agregar ruta <> nil no ayuda en este caso.