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

 
Rashid Umarov:

Recuerdo tu "tengo todas las jugadas escritas" en el hilo de la programación OOP vs procedimental. En este hilo acabé de convencerme de que no se puede confiar en ti.

No hay pruebas ni detalles: no hay necesidad de escribir al servicedesk.


Mi problema con el borrado de carpetas sigue sin resolverse. El script funciona, pero aún no he encontrado la causa de mi problema.


Hay todo tipo de posibilidades. Puede o no ser mi culpa. Siempre estoy dispuesto a proporcionar la información necesaria para resolver el problema.


Mi comentario a servicedek no es en absoluto una queja.

 
Rashid Umarov:

Recuerdo tu "tengo todas las jugadas escritas" en el hilo de la programación OOP vs procedimental. En este hilo acabé de convencerme de que no eres de fiar.

No sé de qué movimientos hablas y por qué crees que no soy de fiar. Puede que haya dado una razón para hacerlo, pero no recuerdo exactamente dónde ni cuándo.

En cualquier caso, gracias por su franca declaración de su actitud hacia mí. Es mejor saber que no saber.

 

Espero que lo entiendas de verdad, has hecho un gran trabajo de Asesoramiento perjudicial - cómo no escribir al Service Desk

 
Rashid Umarov:

Espero que lo consigas de verdad, has hecho un gran trabajo de Asesoramiento perjudicial - cómo no escribir al Service Desk


Por desgracia, no lo conseguí. He intentado ser lo más claro y específico posible en mi mensaje. He dado detalles, he dado un archivo gif, he comentado el código del script. Entonces, ¿qué he hecho mal exactamente?

 

¿De verdad no puedes leer la ayuda y cambiar el código correctamente? ¿Cómo puede entonces exigir una actitud diferente? Aquí está el código de la ayuda, con las adiciones resaltadas en amarillo

//+------------------------------------------------------------------+
//|                                                Test_FileOpen.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- неправильный способ открытия файла
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";
   int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
   if(filehandle<0)
     {
      Print("Неудачная попытка открыть файл по абсолютному пути");
      Print("Код ошибки ",GetLastError());
     }
//--- правильный способ работы в "файловой песочнице"
   ResetLastError();
   filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(_Period));
      FileClose(filehandle);
      Print("FileOpen OK");
     }
   else Print("Операция FileOpen неудачна, ошибка ",GetLastError());

//--- еще один пример с созданием вложенной директории в MQL5\Files\
   string subfolder="Research";
   filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(_Period));
      FileClose(filehandle);
      Print("Файл должен быть создан в папке "+terminal_data_path+"\\"+subfolder);
     }
   else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
//---
   Print("Очищаем папку \\MQL5\\",subfolder);
   FolderClean(subfolder,1);

   Print("Удаляем папку \\MQL5\\",subfolder);
   if(!FolderDelete(subfolder,1))
      PrintFormat("Ошибка! Не удалось удалить папку  \\MQL5\\",subfolder);
  }
//+------------------------------------------------------------------+
 
Rashid Umarov:

¿Realmente eres incapaz de leer la ayuda y cambiar el código correctamente? ¿Cómo se puede pedir una actitud diferente? Aquí está el código de la ayuda, con las adiciones en amarillo

Si la actitud hacia mi persona depende de si he cometido un error en el código, entonces me temo que algo está mal aquí...))

Sigo sin entender realmente sus afirmaciones.

He publicado mi código alterado más de una vez en el foro. Mi único error fue que después de añadir el cierre explícito del archivo, se me olvidó volver a guardar el script y por lo tanto no vi que se solucionaba el problema en el script que cambié. Sin embargo, en cualquier caso, la documentación no dice explícitamente que haya que cerrar los archivos después de su creación.

Más allá de eso, como dije antes, mi problema de borrar carpetas (nota no archivos) seguía siendo. Las carpetas ya no tienen archivos en ellas, pero la función FolderClean las borra.

La causa aún no está clara.

Así que, después de todo, puede que haya acudido al Servicio de Atención al Cliente por una razón.

Gracias por tomarse tanto tiempo para considerar mi problema)).

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

He visto este tipo de cosas más de una vez. He descubierto 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.

Unirse. Desde principios de 2014 he tenido caídas anteriormente muy raras que generaban un error de "32 Sharing violation" del SO en 9 intentos de crear un archivo en esta carpeta, yendo en incrementos de 16 milisegundos seguidos. No pude averiguar qué era lo que estaba mal. Lo achacaba a la "actualización radical de las funciones de manejo de archivos" que se estaba llevando a cabo en MQ en ese momento. Tampoco se puede reproducir, sólo por coincidencia hubo este fallo a las 20:12:42. Inmediatamente, pasaron unos segundos, fui a un archivo en esa carpeta, logré editarlo correctamente y lo guardé. Fallo no detectado.

Antes de esa caída ocurría una o dos veces al mes durante 5 años, desde febrero de 2014 debe ser cada semana, no cuento cuántas veces. Aunque el número de terminales que funcionan simultáneamente se redujo de 40-50 a 35.

 
Vladimir:

Acompañando. Desde principios de 2014 he tenido un fallo, hasta ahora extremadamente raro, que generaba un error de "32 Sharing violation" del SO en 9 intentos de crear un archivo en esta carpeta, yendo en incrementos de 16 milisegundos seguidos. No pude averiguar qué era lo que estaba mal. Lo achacaba a la "actualización radical de las funciones de manejo de archivos" que se estaba llevando a cabo en MQ en ese momento. Tampoco se puede reproducir, sólo por coincidencia hubo un fallo de este tipo justo ahora, a las 20:12:42. Inmediatamente, pasaron unos segundos, fui a un archivo en esa carpeta, logré editarlo correctamente y lo guardé. El fallo no se ha detectado.

Antes, durante 5 años este error aparecía una o dos veces al mes, desde febrero de 2014 es invariablemente cada semana, no podría contar cuántas veces. Aunque el número de terminales que funcionan simultáneamente se redujo de 40-50 a 35.

Todos mis archivos se están borrando incluso sin cerrarlos explícitamente. Borrados porque no los creé y estaban previamente dentro de la carpeta Archivos.

El caso es que para borrar un archivo, necesitamos su mango. Sin embargo, si no hemos creado el archivo, sino que sólo lo hemos colocado en la carpeta Files, no podemos obtener su handle, y por 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.

Intentaré reproducir el problema de forma más clara más adelante, con ejemplos claros.

 
Реter Konow:

Se me borran todos los archivos 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.

Intentaré reproducir el problema de forma más clara más adelante, con ejemplos claros.

Este es probablemente el quid del problema.

Al renombrar una carpeta en el navegador de archivos personalizado, no puedo utilizar FolderRename() porque no existe.

En su lugar, copio todos los archivos y carpetas a una nueva carpeta, con un nombre personalizado, y borro los archivos y carpetas originales de la carpeta original (a la que le cambio el nombre). Como resultado, primero borro todos los archivos de la carpeta original (después de copiarlos a la nueva carpeta) y luego uso FolderClean() para intentar eliminar la jerarquía de carpetas restante en la carpeta original, que ya está vacía. Aquí es donde se produce el error. Algunas carpetas se borran, pero una o dos permanecen, al igual que la carpeta de origen. Después intento borrarlo manualmente y falla. Sólo el reinicio del terminal ayuda.

 
Реter Konow:

Este es probablemente el quid del problema.

Al renombrar una carpeta en el navegador de archivos personalizado, no puedo utilizar FolderRename() porque no existe.

En su lugar, copio todos los archivos y carpetas en una nueva carpeta, con un nombre personalizado, y borro los archivos y carpetas originales de la carpeta original (a la que le cambio el nombre). Como resultado, primero borro todos los archivos de la carpeta original (después de copiarlos en la nueva carpeta) y luego uso FolderClean() para intentar eliminar la jerarquía de carpetas restante en la carpeta original, que ya está vacía. Aquí es donde se produce el error. Algunas carpetas se borran, pero una o dos permanecen, al igual que la carpeta de origen. Después intento borrarlo manualmente y falla. Sólo el reinicio del terminal ayuda.


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 al género de la "literatura técnica".