Buena y limpia manera de esperar hasta que el archivo se cierra [duplicar]


Posible Duplicado:
Espere hasta que el archivo se desbloquee en. NET

Tengo un archivo abierto, como a .Doc or .txt, y tengo que esperar hasta que el usuario lo cierre. Ya intento esto, de acuerdo con Espere hasta que el archivo se desbloquee en. NET :

while (true)
{
    try
    {
      using (FileStream Fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 100))
        {
            //the file is close
            break;
        }
    }
    catch (IOException)
    {
        //wait and retry
        Thread.Sleep(1000);
    }
}

Esto funciona bien ,pero puede ser posible encontrar una solución sin un try/catch y handler la excepción ?

 22
Author: Community, 2011-09-09

3 answers

Desafortunadamente no, no hay otra manera.

La API no tiene un evento que se disparará cuando un archivo esté desbloqueado o cualquier otra cosa que sea conveniente.

Volver a intentar con waits es la mejor solución con la API actual.

 8
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-09 19:07:55

Por un lado, sin embargo, no use el bucle que tiene ahora, breaking si no hay excepción - realice su acceso real al archivo en ese bucle using.

A continuación, si el archivo está abierto en un proceso conocido, puede obtener su objeto Process, establecer EnableRaisingEvents en true y manejar su evento Exited para intentarlo de nuevo. Sin embargo, no es a prueba de fallos, por lo que aún manejaría excepciones y usaría un bucle.

 2
Author: Ry-,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-09 19:10:12

Puede hacer llamadas P/Invoke a la función CreateFile nativa y luego analizar el código de error. Sin embargo, try/catch seguirá siendo necesario.

 0
Author: Vadym Stetsiak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-09 19:16:09