| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Mar 21 Jul, 2009 3:13 pm Asunto: Como puedo identificar si un fichero ya esta abierto |
|
|
Necesito saber como puedo o que funcion debo usar para identificar si un fichero esta abierto por otra aplicacion.
La situacion es la siguiente, tengo varios ejecutables que escriben registros en lineas de texto en un mismo archivo concurrentemente.
Despues de hacer muchas pruebas llegue a la conclusion de que el S.O. permite abrir un mismo archivo a varias aplicaciones en modo append, escritura para añadir pero solo una aplicacion puede escribir al mismo tiempo.
Pero en la practica me encontré en un cliente en el que se intercalaban datos escritos por varios ejecutables que acceden a la vez.
La clase que uso es ofstream, y escribo siempre el buffer de una vez.
Gracias, la verdad es que me urge un poquito encontrar una solucion fiable y si puede ser sencilla.
Gracias. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 21 Jul, 2009 4:29 pm Asunto: |
|
|
No he usado nunca este elemento, pero leyendo la ayuda de ofstream, más concretamente de basic_ofstream, habla de una función isopen(); no sé si te valdrá. Por otra parte se me ocurre usar las funciones try...catch. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Mar 21 Jul, 2009 5:18 pm Asunto: |
|
|
no lo he probado, pero creo que esa funcion solo sirve para comoprobar si tu has abierto el fichero con ofstream::open() pero no para saber si el sistema operativo mantiene el fichero ocupado por otra aplicacion.
Hay un programa que a mi me gusta mucho, se llama unlocker que cuando tratas de hacer una operacion con un archivo que esta cojido por otro programa es capaz de "unlockarlo" (liberarlo) para que tu puedas realizar alguna operacion con el en ppio no permitida como podria ser mover el fichero o borrarlo.
Unlocker es capaz de identificar que aplicación mantiene abierto que fichero, yo no necesito tanto, solo saber si el fichero esta abierto por otra aplicación.
Evidentemente podria probar a borrarlo o a moverlo para ver si está ocupado pero eso no me sirve.
try catch tampoco sirve porque no salta ninguna excepcion.
Gracias, espero mas respuestas porfavor. |
|
| Volver arriba |
|
 |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Mar 21 Jul, 2009 6:08 pm Asunto: |
|
|
solucion
f = new TFileStream("fichero.txt",fmShareExclusive|fmOpenReadWrite); |
|
| Volver arriba |
|
 |
|