not - saber si existe un archivo c#
C#File.Exists devuelve false, el archivo existe (2)
Usando VS 15, C # con .Net 4.5.2
La computadora está en una red AD, con el nombre de anuncio "AD".
Este problema ocurre con los derechos de usuario normal de AD, los derechos de administrador de AD y los derechos de administración local. No importa qué derechos obtiene el programa, ocurre el mismo problema.
Nuestro archivo de prueba es " C: /windows/system32/conhost.exe ".
El archivo de arriba existe, existe mucho. Puedo verlo con el explorador.
Este es el archivo en el explorador:
Estas son las propiedades del archivo:
Puedes ver que está ahí, ¿verdad?
El siguiente comando cmd comprueba si el archivo existe:
IF EXIST "C:/windows/system32/conhost.exe" (echo does exist) ELSE (echo doesnt exist)
Vuelve " existe " como prometió.
El siguiente código de C # comprueba si el archivo existe:
FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");
Esto devuelve " Falso ".
Este código también devuelve " Falso ":
MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
Este código tampoco lo encuentra:
foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
//conhost is NEVER mentioned, like it doesn''t exist
}
Este código tampoco lo encuentra:
foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
//conhost is NEVER mentioned, like it doesn''t exist
}
Falso, falso, falso
MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C://windows//system32//conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:/windows/system32/conhost.exe") + "");
¿Qué estoy haciendo mal?
Nota adicional: copié conhost a C: / conhost.exe, y mi programa puede encontrarlo sin problema. Mi programa también encuentra otros archivos en system32, pero no conhost y algunos otros. Por ejemplo, encuentra "connect.dll" que está en system32, por lo que no es el permiso de lectura del directorio.
Más notas adicionales: conhost.exe y connect.dll tienen los mismos atributos de seguridad (pestaña Seguridad en las propiedades del archivo).
En la documentación de MSDN para System.IO.File.Exists(path) , indica:
Si la persona que llama no tiene suficientes permisos para leer el archivo especificado, no se lanza ninguna excepción y el método devuelve falso independientemente de la existencia de la ruta.
Por esta razón, podemos asumir con seguridad que su aplicación no tiene acceso de lectura a ese archivo específico. Compruebe la configuración de seguridad y otorgue acceso de lectura si aún no lo ha hecho.
Cree su aplicación (en modo de lanzamiento) y ejecútela como administrador.
Si está utilizando el sistema x64, tendrá un contenido diferente del directorio c:/Windows/System32
para las aplicaciones x86 y x64. Asegúrese de estar utilizando la misma arquitectura que ejecuta el archivo por lotes y su aplicación C #.