微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Directory.GetFilesfind不存在的文件

我只是偶然发现了System.IO.Directory GetFiles方法的未logging行为。

只要传递给方法的searchPattern参数包含保留的Windows设备名称(如"nul.*"或"aux.bmp" ,该方法就会返回一个包含不存在文件名称的数组,如C:Usersft1nul或D:aux等。

我不知道这些设备名称是否具有特殊的含义,如“。” 或“..”,或者这只是一种错误。 无论如何,这似乎仍然很奇怪。 例如,C#中的这个代码片段:

string[] fileNames = Directory.GetFiles(@"C:D:.......","con.txt"); foreach (string fileName in fileNames) Console.WriteLine(fileName);

版画

如何将aspnet_compiler更新到4.6.1?

服务无法启动。 服务进程无法连接到服务控制器

让Windows决定如何打开/运行该文件

Mono应用程序在尝试更改控制台前景色时失败,并出现ArgumentNullException

如何检查.NET框架是否安装

C:D:.......con

任何线索?

在Linux中使用Visual Studio C#程序

如何从.cpp文件访问文本框?

如何为xbuild添加缺less的程序集引用? (单声道/ Linux)的

如何将引发的exception映射到事件ID以进行日志logging?

PrincipalContext.ValidateCredentials在XP上始终使用Machine ContextType返回False

这是已知的。 这是一个关于命名文件,路径和命名空间(Windows)的操作系统设计,

摘抄:

CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5, LPT6,LPT7,LPT8和LPT9。 还要避免这些名字后跟一个扩展名; 例如,不建议使用NUL.txt。 有关更多信息,请参阅命名空间。

这些基本上是文件名别名(名称空间),所以它们总是存在于全局(在每个文件夹中)。 如果你试图枚举它们,你会得到它们,因为它们确实存在。

这些是MSDOS / NTFS的保留字 。

维基百科 :

另外,在Windows和DOS实用程序中,某些单词也可能被保留,不能用作文件名。 例如,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.

具有这些限制的系统会导致与其他一些文件系统不兼容。 例如,Windows将无法处理或提出这些合法的UNIX文件错误报告:aux.c,q“uote”s.txt或NUL.txt。

内部使用的NTFS文件包括

$Mft,$MftMirr,$LogFile,$Volume,$AttrDef,$Bitmap,$Boot,$BadClus,$Secure,$Upcase,$Extend,$Quota,$ObjId and $Reparse

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐