Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Por favor, continúe, siempre que escriba en el fascinante género de la "ficción". Con suerte, hacia la página 40 habrás pasado a la literatura técnica.
Tengo todos los archivos borrados incluso sin cerrarlos explícitamente. Borrados porque no los creé y estaban previamente dentro de la carpeta Archivos.
La cuestión es que para borrar un archivo, necesitamos su mango. Sin embargo, si no creamos este archivo, sino que sólo lo colocamos en la carpeta Files, no podemos obtener su handle, y por lo tanto no podemos cerrarlo con FileClose().
Al mismo tiempo, podemos copiarlo o borrarlo. Sin embargo, la carpeta no puede ser eliminada después de eso ni programada ni manualmente. Manualmente sólo después de reiniciar el terminal.
Más adelante intentaré reproducir el problema de forma más clara, con ejemplos ilustrativos.
El código sólo tiene que estar completo. Si el archivo está abierto, debe cerrarse antes de apagar el ordenador o cerrar MT4/5. Y preferiblemente, el asa debe ser accesible desde cualquier lugar del programa. Esto es IMHO. Mejor aún, cierre el archivo inmediatamente después de realizar una operación de lectura/escritura con él o incluso si no tiene que hacer nada con él.
La documentación de ejemplo parece mostrar cómo no hacerlo.
También es muy importante recordar que cuando se escribe en un archivo, el archivo escrito sólo se puede leer si se vacían todos los datos que quedan en el búfer de E/S del archivo en el disco utilizando FileFlush o cerrando el archivo. El cierre del archivo forzará un reinicio de los datos en el disco.
Resumen: Si abres un archivo, no olvides cerrarlo. Y no se perderá el mango del archivo.
El código simplemente tiene que estar completo. Si un archivo está abierto, debe cerrarse antes de apagar el ordenador o cerrar MT4/5. Y el mango, preferiblemente, debe ser accesible desde cualquier lugar del programa. Esto es IMHO. Mejor aún, cierre el archivo inmediatamente después de la operación de lectura/escritura con él o incluso si no tuvo que hacer nada con él.
La documentación de ejemplo parece mostrar cómo no hacerlo.
También es muy importante recordar que cuando se escribe en un archivo, el archivo escrito sólo se puede leer si se vacían todos los datos que quedan en el búfer de E/S del archivo en el disco utilizando FileFlush o cerrando el archivo. El cierre del archivo forzará un reinicio de los datos en el disco.
Resumen: Si abres un archivo, no olvides cerrarlo. Y no se perderá el mango del archivo.
Una vez más, puedo cerrar un archivo creado por mi programa usando la función FileClose() - tengo su mango.
No puedo cerrar un archivo creado por otra persona, pero que existe en la carpeta Archivos, porque no tengo un controlador para él.
Si copio un archivo, que no fue creado por mí (no por mi programa), entonces no puedo cerrarlo después de copiarlo con la función FileClose() (no hay manija), PERO puedo borrarlo.
Tal vez por eso las carpetas con archivos copiados y borrados no son eliminadas por la función FolderClean(). Probablemente, porque no se cerraron después de ser copiados.
PERO NO SE PUEDEN CERRAR PORQUE NO TIENEN ASA.
:)))
Preguntas para los desarrolladores:
1. ¿Cómo puedo obtener el control del archivo que se creó en la carpeta Files antes de cargar el script?
2. ¿Podría tener la causa anterior el problema de borrar carpetas mediante FolderClean(), después de borrar los archivos que hay en ellas y que se copiaron previamente a otra carpeta y no se cerraron tras la copia (porque no hay asa)?
Preguntas para los desarrolladores:
1. ¿Cómo puedo obtener el control del archivo que se creó en la carpeta Files antes de cargar el script?
2. ¿Podría el problema de borrar carpetas con la función FolderClean(), después de borrar archivos en ellas que fueron copiados previamente en otra carpeta y que no se cerraron después de la copia (porque no hay un manejador), tener la razón anterior?
Esto es más o menos lo básico del sistema operativo. Si una aplicación ha abierto un archivo para escribirlo, ni ese archivo ni la carpeta que lo contiene pueden ser eliminados. Intenta abrir un archivo en Word y luego utilizar las herramientas del sistema operativo para eliminar la carpeta en la que se encuentra. ¿Qué pasará? No podrás, porque no tendrás acceso a ella.
Bueno, puedes conseguir el mango del archivo. Pero, ¿de qué serviría esa acción? Después de todo, si el archivo es abierto por otra aplicación, verá la declaración anterior. Sólo obtendremos un manejador que sea válido en nuestra aplicación.
Esto es más o menos lo básico del sistema operativo. Si una aplicación ha abierto un archivo para escribirlo, no se puede eliminar ni el archivo ni la carpeta que lo contiene. Intenta abrir un archivo en Word y luego usar el sistema operativo para eliminar la carpeta en la que se encuentra. ¿Qué pasará? No podrás, porque no tendrás acceso a ella.
Bueno, puedes conseguir el mango del archivo. Pero, ¿de qué serviría esa acción? Después de todo, si el archivo es abierto por otra aplicación, verá la declaración anterior. Y sólo podemos obtener un mango que sea válido en nuestra aplicación particular.
El archivo es abierto por mi aplicación (navegador de archivos) para ser sobrescrito en otra carpeta.
Después de sobrescribir necesito cerrar el archivo pero no puedo - (no hay asa) así que simplemente borro el archivo.
No hay ningún asidero porque el archivo fue creado no se sabe cuándo y no se sabe por quién.
Al mismo tiempo, el archivo existe dentro de la carpeta Files y puede ser copiado a otra carpeta y luego borrado.
Pero después de copiar, el archivo no puede cerrarse. No hay asa.
Esta es probablemente la razón por la que el borrado posterior de carpetas FolderClean() con archivos borrados, no funciona.
Pregunta: ¿Cómo puedo introducir el mango de este archivo en el programa MQL?
Este parece ser un problema al que todavía no se ha enfrentado la comunidad... :)
Vale, ya se me ocurrirá algo.
Siempre lo hago).
Desmontando mitos.
Por lo tanto, los datos del terminal en el sistema operativo:
En el momento de las pruebas, se ha creado la carpeta "test" en [carpeta de datos]\MQL5\Files y se ha creado en ella el archivo de texto "source.txt" con el siguiente contenido:
Entonces, paso 1: Copiar el archivo "source.txt" en otro utilizando las herramientas MQL5
Guión:
Paso 2: Limpieza de la carpeta "test" con las herramientas MQL5
Guión:
Paso 3: Eliminación de la carpeta "test" mediante las herramientas MQL5
¿Cuál es el problema? Todo funciona.
¿Cuál es el problema? Todo funciona.
Gracias por el ejemplo. Lo resolveré mañana por la mañana. Ahora mismo no tengo energía).
Probaré todo y te daré una respuesta.
Añadido:
Has citado tres guiones diferentes aquí.
Tengo un programa y copiar, borrar archivos y carpetas sucede dentro de una función en dos ciclos.
Entra en el primer ciclo: primero se copian los archivos de origen en otra carpeta y luego se borran esos archivos de origen. Salir del primer ciclo.
Entramos en el segundo bucle: limpiamos la carpeta de origen con FolderClean() y borramos la carpeta de origen con -FolderDelete().
Entonces miramos en el navegador de archivos del meta-editor y vemos que la carpeta de origen ha sido parcialmente borrada. Las subcarpetas que no tenían archivos se han borrado completamente y las que tenían algunos archivos no se han borrado, pero están vacías.
Tratando de eliminar las carpetas manualmente - lo tenemos:
A continuación, cerramos el terminal y lo iniciamos de nuevo. Vemos que algunas subcarpetas desaparecieron por sí solas, otras permanecieron. Los borramos manualmente sin problemas. Esta vez.