2010-01-22 28 views
5

En mi aplicación, intento cambiar el nombre de la carpeta, pero si la carpeta se abre en Windows Explorer obtengo un IOException. ¿Cómo puedo identificar si la carpeta está abierta en el Explorador de Windows en C#?¿Cómo identificar si la carpeta está abierta?

+0

Windows Explorer, cmd, algún otro administrador de archivos, un cuadro de diálogo de abrir/guardar. Hay más cosas que solo Explorer que puede mantener esto abierto. – Joey

+0

¿Desea identificar si el Explorador de Windows, específicamente, lo tiene abierto, o si algún otro proceso tiene un controlador abierto para él? ¿Y qué quieres lograr? Capturar la excepción es una indicación bastante buena de que algún otro proceso tiene sentido, si eso es todo lo que pretendes. – Dathan

+0

@Dathan Excepción de captura es una buena idea, pero tenemos una aplicación multi-código de base de código muy grande. Es bueno si identificamos el clima que hemos alcanzado. Gracias –

Respuesta

8

captura la IOException?

Como han dicho otros, simplemente intente hacer lo que quiera, tome la excepción si sucede y tome las medidas adecuadas, sea lo que sea que esté en su contexto.

Usted realmente no tiene mucha opción en mi opinión, tener en cuenta:

bool iHaveAccess = CheckAccess(folder); 
if (iHaveAccess) 
{ 
    RenameFolder(folder,newFolderName); 
} 

lo que sucede si se encuentra entre CheckAccess éxito y llamando RenameFolder algo bloquea la carpeta? ¿Qué vas a hacer entonces?

+0

Sí, así es como lo haría. Probablemente deberías estar monitoreando esto de todos modos. – Toji

1

No es razonable determinar si un programa tiene una carpeta abierta de tal forma que no pueda cambiarle el nombre. Porque inmediatamente después de tomar la determinación, otro proceso podría comenzar o detenerse usando la carpeta. En su lugar, solo haga la operación y capte la excepción resultante.

try { 
    Directory.Move("old","new"); 
    return true; 
} catch (IOException) { 
    return false; 
} 
0

después de un poco de búsqueda me encontré this post y this post que muestran diversas técnicas de cómo se puede determinar mediante programación qué proceso ha bloqueado un archivo. Uno de ellos debería permitirle verificar si el explorador tiene la carpeta bloqueada.

Cuestiones relacionadas