c# - from - Directory.GetFiles encuentra archivos inexistentes
get files from directory c# (2)
Me topé con un comportamiento no documentado de los métodos GetFiles
en System.IO.Directory
.
Siempre que el parámetro searchPattern
pasado al método contenga un nombre reservado de dispositivo de Windows, como "nul.*"
O "aux.bmp"
, el método devuelve una matriz que contiene el nombre de un archivo no existente, como C:/Users/ft1/nul
o D:/aux
, etc.
Me pregunto si esos nombres de dispositivo tienen un significado especial en ese contexto, como "." o "..", o si esto es solo una especie de error. De todos modos, eso todavía parece bastante extraño. Por ejemplo, este fragmento de código en C #:
string[] fileNames = Directory.GetFiles(@"C:/D:/../../.../", "con.txt");
foreach (string fileName in fileNames) Console.WriteLine(fileName);
huellas dactilares
C:/D:/../../.../con
¿Alguna pista?
Estas son palabras reservadas por MSDOS / NTFS.
De la Wikipedia :
Además, en las utilidades de Windows y DOS, algunas palabras también pueden reservarse y no pueden usarse como nombres de archivo. Por ejemplo, archivos de dispositivos DOS:
CON, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
Los sistemas que tienen estas restricciones causan incompatibilidades con algunos otros sistemas de archivos. Por ejemplo, Windows no podrá gestionar o generar informes de errores para estos nombres de archivo UNIX legales: aux.c, q "uote" s.txt o NUL.txt.
Los nombres de archivo NTFS que se usan internamente incluyen:
$Mft, $MftMirr, $LogFile, $Volume, $AttrDef, $Bitmap, $Boot, $BadClus, $Secure, $Upcase, $Extend, $Quota, $ObjId and $Reparse
Esto es conocido. Es un diseño de sistema operativo relacionado con nombres de archivos, rutas y espacios de nombres (Windows)
Extracto:
No utilice los siguientes nombres reservados para el nombre de un archivo: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 y LPT9. También evite estos nombres seguidos inmediatamente por una extensión; por ejemplo, NUL.txt no es recomendado. Para obtener más información, vea Espacios de nombres.
Estos son básicamente alias de nombre de archivo (espacios de nombres), por lo que siempre existen globalmente (en cada carpeta). Si intenta enumerarlos, los recuperará porque existen.