Escribir en el archivo en una nueva línea - página 6

 
Aleksei Stepanenko:
Sergei tiene varios Asesores Expertos trabajando allí, hay varias filas, así que es un array. Y por eso todo se ve feo. Maxim Kuznetsov sugirió SQL, esta es la forma correcta de que estos EAs se comuniquen entre sí.

Pero las líneas se leen de una en una y de alguna manera se selecciona la correcta. Y entonces no necesitas una matriz.

Yo también lo dije, pero mql4 no soporta SQLite

 

¿No conecté la biblioteca? O no hay, lo olvidé.

 
Aleksei Stepanenko:

¿No conecté la biblioteca? O no hay, lo olvidé.

Parece que no es posible editar un archivo a la vez, porque se guarda la versión del archivo que se guardó después.

Por ejemplo, el programa A abrió el archivo para editarlo, al mismo tiempo el programa B hizo lo mismo, luego el programa A hizo los cambios y los guardó usando FileClose, luego el programa B hizo lo mismo, pero cuando el programa C abra el archivo, no mostrará los cambios hechos por el programa A, sino sólo los cambios que fueron implementados y guardados por el programa B, porque el programa B guardó el archivo más tarde que el programa A.

Pero esto no es seguro.

¿Hay alguna información al respecto?

 
El trabajo simultáneo de programas con un archivo es el peor de los males. Mientras trabaja en un archivo, un EA debe controlar la prohibición de que otros EAs lean/escriban ese archivo. Utilice SQL o lavariable global flag o el archivo flag. De lo contrario, se producirán errores incomprensibles y difíciles de detectar.
 
Aleksei Stepanenko:
El trabajo simultáneo de los programas con un archivo es el peor de los males. Al momento de trabajar con el archivo, el Asesor Experto debe controlar la prohibición de lectura/escritura de este archivo por parte de otros Asesores Expertos. Utilizar lavariable global SQL o flag o el archivo flag. De lo contrario, habrá errores incomprensibles y difíciles de detectar.

No es tan malo, hay todo tipo de tareas, sólo hay que tener en cuenta ciertas peculiaridades.

Al parecer, los cambios se guardan exactamente en el momento de FileClose, y nadie es consciente de ellos hasta entonces.

 
Depende de ti. El cerebro humano está construido de tal manera que las nuevas ideas son difíciles de conseguir.
 
EfremovSergey:

Parece que no es posible editar un archivo a la vez, porque se guarda la versión del archivo que se guardó después.

Por ejemplo, el programa A abrió el archivo para editarlo, al mismo tiempo el programa B hizo lo mismo, luego el programa A hizo cambios y los guardó usando FileClose, luego el programa B hizo lo mismo, pero cuando el programa C abra el archivo, el archivo no contendrá los cambios hechos por el programa A, sino sólo los cambios que el programa B hizo y guardó, porque el programa B guardó el archivo más tarde que el programa A.

Pero esto no es seguro.

¿Hay alguna información al respecto?

Es difícil de montar, pero no imposible. Basta con comprobar, antes de guardar, la hora del último cambio con la misma hora en la apertura. LeemosFILE_MODIFY_DATE, luego abrimos el archivo, hacemos los cambios, volvemos a leer FILE_MODIFY_DATE, comparamos con el anterior y si no se han hecho cambios, cerramos el archivo y guardamos los cambios. Si no, descartamos los cambios... y lo abrimos de nuevo. Así.

 
EfremovSergey:

No es tan malo, las tareas son diferentes, pero hay ciertas peculiaridades que hay que tener en cuenta.

Aparentemente, los cambios se guardan en el momento de FileClose, y nadie es consciente de ellos hasta entonces.

No es un hecho.

FileFlush

Restablece en el disco todos los datos que quedan en el buffer de E/S del archivo.

void  FileFlush( 
   int  file_handle      // handle файла 
   );
 
Alexey Viktorov:

Difícil de montar, pero no imposible. Basta con comprobar, antes de escribir, la hora del último cambio con la misma hora al abrirlo. Es decir, leerFILE_MODIFY_DATE, luego abrir el archivo, hacer los cambios, volver a leer FILE_MODIFY_DATE, comparar con el anterior y si nadie hizo cambios, cerrar el archivo guardando los cambios. Si no, descartamos los cambios... y lo abrimos de nuevo. Así.

Es más o menos lo mismo que la bandera "ocupada" (por orden de llegada), sólo que a veces es más complicado, pero la idea es interesante, me gusta, gracias.

 
Alexey Viktorov:

No es un hecho.

FileFlush

Restablece en el disco los datos que quedan en el buffer de E/S del archivo.

No estoy seguro de lo que esto significa en el contexto de guardar FileClose.

Razón de la queja: