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 ?
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.
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, break
ing 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.
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.
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