No borrar una carpeta si contiene archivos no cerrados - página 3

 
Реter Konow:
Hasta donde yo sé, si no se han hecho cambios en el archivo usando funciones de archivo (por ejemplo, FileWrite()), no hay necesidad de cerrarlo. La función FileOpen() simplemente crea un nuevo archivo y esta operación no requiere el cierre del archivo (la documentación de esta función, tampoco dice que el archivo necesita ser cerrado después de la creación).

Oy-lee! Cuentacuentos https://docs.mql4.com/ru/files/fileopen


//--- la forma correcta de trabajar en la "caja de arena de archivos"
ResetLastError();
filehandle=FileOpen("fractales.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(ENUM_TIMEFRAMES(_Period));
FileClose(filehandle);
Print("FileOpen OK");
}
si noPri

FileOpen - Файловые операции - Справочник MQL4
FileOpen - Файловые операции - Справочник MQL4
  • docs.mql4.com
FileOpen - Файловые операции - Справочник MQL4
 
Rashid Umarov:

Oy-lee! Cuentacuentos https://docs.mql4.com/ru/files/fileopen


¿Cuál es la contradicción con lo que he dicho?

Dije, -

Retag Konow:
Hasta donde yo sé, si no se han hecho cambios en el archivo usando funciones de archivo (por ejemplo, FileWrite()), no hay necesidad de cerrarlo. La función FileOpen() sólo crea un nuevo archivo y esta operación no requiere que se cierre el archivo (la documentación de esta función tampoco dice que el archivo deba cerrarse después de la creación).


Pero en su ejemplo la función FileWrite() se utiliza inmediatamente después de la creación del archivo. Y luego se utiliza FileClose(filehandle);


Además, en el código del script anterior añadí un cierre explícito, pero eso no solucionó nada...

 
Реter Konow:

Exactamente así. Cuando intento borrar una carpeta que ya contiene subcarpetas y archivos, primero borro los archivos. Sólo quedan las subcarpetas. Intento limpiarlas usando FolderClean() y luego llamo a FolderDelete(). Sin embargo, el resultado es que aquellas subcarpetas que estaban vacías se borran bien, pero si había más subcarpetas dentro de las subcarpetas no se borran. Después de eso, intento eliminar las carpetas del navegador de archivos en el MetaEditor manualmente, pero el terminal no las elimina y aparece esta ventana:

Hago clic en "Continuar", acepto los cambios, pero la carpeta sigue sin borrarse. Después de cerrar por completo y volver a abrir el terminal, las carpetas que deberían haber sido borradas desaparecen por sí solas o no, pero puedes borrarlas inmediatamente y de forma manual sin la ventana anterior.

Cosas tan extrañas...

He visto este tipo de cosas muchas veces. Me he dado cuenta de que en algún momento la carpeta Files con todas sus subcarpetas y archivos adquiere el atributo de sólo lectura. Deseleccionar esta bandera manualmente no ayuda. Pero reiniciar el terminal siempre ayuda. No pude conseguir que se reprodujera (no lo intenté), así que no lo reporté a la SD.

 
A100:

El error (5022) sólo se produce si se establece FILE_COMMON

Borra la carpeta pero no la elimina

Esta bandera no necesita ser establecida, de lo contrario el archivo será buscado en la carpeta compartida, y el error dice que el nombre del directorio es incorrecto.

Ruta del archivo

"\\MQL4\\Files";

no requiere que se active esta bandera. Así que todo es correcto.

 
fxsaber:

He visto este tipo de cosas varias veces. Descubrí que en algún momento la carpeta Files con todas las subcarpetas y archivos adquiere el atributo de sólo lectura. Deseleccionar esta bandera manualmente no ayuda. Pero reiniciar el terminal siempre ayuda. No pude conseguir que se reprodujera (no lo intenté), así que no lo reporté a la SD.

Gracias. Me alegro de no ser el único que se enfrenta a este problema. Necesito resolver este problema (no puedo terminar de usarel navegador de archivos sin él). He escrito a servicedeck. Pero también escribo aquí, por si acaso. No resultó en vano).
 
Реter Konow:

Esta bandera no necesita ser establecida, de lo contrario el archivo será buscado en la carpeta pública y el error dice que el nombre del directorio es incorrecto.

Tanto con como sin FILE_COMMON - funciona (originalmente al comprobarlo olvidé poner esta bandera en el último if). Con FILE_COMMON se dio a entender que está presente en todas las operaciones

 
Реter Konow:

Esta bandera no necesita ser establecida, de lo contrario el archivo será buscado en la carpeta pública, y el error dice que el nombre del directorio es incorrecto.

La ruta del archivo

no requiere que se active esta bandera. Así que todo es correcto.

Esto es extraño. Me fijé en las rutas de las carpetas MQL4 y recompilé el código en .ex4 y, extrañamente, el código funcionó sin errores. Eliminé el cierre del archivo y obtuve

2017.08.28 17:36:18.525 Demo_FolderDelete EURUSD.e,H4: Не удалось удалить папку nonempty. Код ошибки=5025
2017.08.28 17:36:16.985 Demo_FolderDelete EURUSD.e,H4: Не удалось очистить папку nonempty. Код ошибки=5026

Luego sin correcciones lo ejecuté en mt5 y extrañamente la mención de la carpeta MQL4 fue ignorada. La carpeta y el archivo se han creado en la carpeta MQL5. A partir de aquí todo es igual que en MT4. Un archivo no cerrado no se borra...

2017.08.28 17:50:45.328 Demo_FolderDelete (CADJPY,H4)   Не удалось очистить папку nonempty. Код ошибки=5025
2017.08.28 17:50:47.958 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки=5024
 
La servidumbre respondió. Dicen que el archivo debe cerrarse después de la creación. Pero lo cierro y el problema sigue... Ay...(
 
Alexey Viktorov:

Todo esto es extraño. Me fijé en las rutas de las carpetas MQL4 y recompilé el código en .ex4 y, extrañamente, el código funcionó sin errores. Eliminó el cierre del archivo y obtuvo

Luego sin correcciones lo ejecuté en mt5 y extrañamente la mención de la carpeta MQL4 fue ignorada. La carpeta y el archivo se han creado en la carpeta MQL5. A partir de aquí todo es igual que en MT4. Un archivo no cerrado no se borra...

Es decir, ¿has hecho un Asesor Experto a partir de un script y has intentado ejecutarlo?

 
Реter Konow:
Pero lo cierro y el problema sigue... Ay...(
Y prueba FILE_COMMON en todas partes