ver veo unidades unidad recuperar reconoce puedo problemas desconecta conectar conecta automaticamente c# windows-7 openfiledialog network-drive

c# - veo - La aplicación dice que la unidad de red no existe, pero se encontró usando OpenFileDialog



ver unidades de red windows 10 (5)

He hecho una pequeña aplicación que se ejecuta en un Win7-PC. Todo lo que hace es verificar el contenido de una unidad de red a la 1:00 en punto de la mañana (y compararlo con una carpeta en su disco duro local), y si hay diferencias, copie las diferencias a esta carpeta .

El problema es que a veces no puede encontrar la unidad de red.

Cuando se inicia la aplicación, la unidad de red se encuentra utilizando un botón en la aplicación que inicia OpenFileDialog, y la letra de la unidad resultante se coloca en un cuadro de texto junto al botón. A partir de ese punto, debería funcionar solo. La PC nunca se apaga.

Cuando dice que no se puede encontrar la unidad de red, puedo presionar manualmente el botón en la misma aplicación, seleccionar la unidad en OpenFileDialog (la letra de la unidad nunca cambia) y la aplicación se ejecutará sin problemas en un par de días. Entonces el problema ocurre nuevamente.

La pregunta es: ¿Por qué se puede acceder a la unidad de red a través de OpenFileDialog en mi aplicación, pero mi aplicación no?

Mi aplicación inicia el proceso de copia usando esta función (llamada con "Y: /") para determinar si el disco está presente o no:

public bool fn_drive_exists(string par_string) { DirectoryInfo di_dir = new DirectoryInfo(par_string); if (di_dir.Exists) { return true; } return false; }

... y a veces devuelve un False, hasta que "lo despierto" usando OpenFileDialog.

¿Qué hace OpenFileDialog, que mi aplicación no?


También puedes intentar usar:

System.IO.Directory.Exists(par_string);

en lugar de escribir su propio método para la misma cosa. Esperaría que un método de marco de trabajo pueda "activar" la unidad de red. Nota: El método también funciona para rutas UNC (algo como //<server name or IP address>/<shared folder> )


Si su destino tiene una dirección IP estática, le sugiero que use esa dirección IP en lugar del nombre de dominio para la unidad de red


Como dice Harvey, use la ruta UNC para acceder a la carpeta, por ejemplo // server / sharedfolder. En lugar de // servidor, use el nombre del servidor. Su computadora tiene un nombre y también lo hace el servidor. También puedes usar la dirección IP si lo sabes. Reemplace / sharedfolder con la ruta a los archivos. Algunos ejemplos:

// AppsServer / c $ / Archivos de programa (x86)

// FileServer1 / d $ / Users / John / My Documents

El c $ representa que el disco C es la carpeta compartida. Si no se comparte la unidad completa, deberá compartir la carpeta específica. Puede hacerlo iniciando sesión en el servidor, haciendo clic con el botón derecho en la carpeta y seleccionando Propiedades. Luego, vaya a la pestaña Compartir y marque la casilla Compartir esta carpeta. Si su carpeta compartida se llama MyShare, entonces su ruta UNC para acceder a la carpeta será

// servidor / MyShare


De acuerdo con esta publicación SO , el problema debería desaparecer si usa la ruta UNC en lugar de la unidad de red asignada.


Esta publicación SO describe una situación similar a la que describió.

Uno de los enlaces publicados como respuesta a esa pregunta me llevó a este artículo de MSDN que proporciona una variedad de razones sobre por qué uno puede encontrar errores al intentar acceder a las unidades de red compartidas utilizando una letra de unidad asignada.

La sugerencia de Microsoft (ver a continuación) es simplemente usar una ruta UNC.

Un servicio (o cualquier proceso que se ejecute en un contexto de seguridad diferente) que debe acceder a un recurso remoto debe usar el nombre de Convención de nomenclatura universal (UNC) para acceder al recurso.

Para responder a su pregunta de manera más específica, con respecto a por qué de repente no puede acceder al recurso compartido de red, me atrevería a decir que Windows ha desconectado el recurso compartido de red debido a un tiempo de inactividad, como se explica en KB297684 . Cualquier intento de acceder a la unidad desconectada se resolverá con una pequeña espera a medida que se restablezca la conexión con el recurso compartido de red, lo que presumiblemente podría ser el motivo de su problema.

Para probar esta teoría, intente escribir algunos datos en un archivo en la unidad de red en un intervalo relativamente corto (¿quizás cada 10 minutos?) Para intentar convencer a Windows de que la unidad todavía está activa.