Directory.GetFiles finds nonexisting files

后端 未结 3 569
無奈伤痛
無奈伤痛 2021-02-07 04:27

I just stumbled upon an undocumented behavior of the GetFiles methods in System.IO.Directory.

Whenever the searchPattern parameter

相关标签:
3条回答
  • 2021-02-07 04:46

    These are reserved words by MSDOS/NTFS.

    From Wikipedia:

    In addition, in Windows and DOS utilities, some words might also be reserved and can not be used as filenames. For example, DOS device files:

    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.
    

    Systems that have these restrictions cause incompatibilities with some other filesystems. For example, Windows will fail to handle, or raise error reports for, these legal UNIX filenames: aux.c, q"uote"s.txt, or NUL.txt.

    NTFS filenames that are used internally include:

    $Mft, $MftMirr, $LogFile, $Volume, $AttrDef, $Bitmap, $Boot, $BadClus, $Secure,
    $Upcase, $Extend, $Quota, $ObjId and $Reparse
    
    0 讨论(0)
  • 2021-02-07 04:50

    This is known. It is an operating system design regarding Naming Files, Paths, and Namespaces (Windows)

    Excerpt:

    Do not use the following reserved names for the name of a file: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. Also avoid these names followed immediately by an extension; for example, NUL.txt is not recommended. For more information, see Namespaces.

    These are basically filename aliases (namespaces), so they always exist globally (in every folder). If you attempt to enumerate them, you'll get them back because they do exist.

    0 讨论(0)
  • 2021-02-07 04:56

    As an addendum to this, had a related issue when using a json config file in an MSTest dll. When I called it Test_Settings_Develop.json, Directory.GetFiles found it, but said it did not exist, so my tests failed to run, on attempting to load it.

    Renamed it to TestSettings_Develop.json and it worked.

    0 讨论(0)
提交回复
热议问题