c# – 可以在文件扩展名中存在空格?

我正在处理一些涉及将文件保存到用户定义文件代码.如果用户传入没有扩展名的文件名,代码将根据文件类型(内部存储)自动检测扩展名.

但是,我很难确定传递给代码文件名是否有扩展名.我使用Path.HasExtension(filename)和Path.GetExtension(filename),但似乎表现出奇怪的行为:

File.EXT => .EXT是扩展名.这可以.

这是一个File.EXT => .EXT是扩展名.这也很好.

这是一个文件.不是扩展名=> .不是扩展名是扩展名.但是,我认为这是一个没有扩展名的文件.当我创建一个具有这个名称文件(创建一个无法识别的扩展名的文件导致Windows将其称为EXTENSIONNAME文件)时,Windows也会这样认为,而没有这样的扩展名的文件称为File).

这是一个File.Not An Extension =>不扩展是扩展名.与上述相同的问题

另请注意,在Path.GetFileNameWithoutExtension(filename)中,同样的行为是显而易见的(例如,它在最后两个示例中报告文件名,而不是扩展名,只是这是一个文件).

所以我从这里得出的结论是,.NET和Windows的区别在于他们认为是扩展.

问题:
我想知道是否可以实现如下这样的代码

if(!Path.HasExtension(filename)|| Path.GetExtension(filename).Contains(“”)){…}

因为这将使我的代码的正确扩展的定义更符合Windows对待事情.还是有一些我在这里缺少的东西,明确地说我必须允许我的扩展中的空格?

搜索并找到了this slightly similar question,但是其中链接的文档仅指定不推荐使用空格/期限结束扩展 – 他们对扩展名中的空格一无所知.

解决方法

Windows中的文件名扩展纯粹是一个惯例. GetExtension和HasExtension方法仅在文件名中查找一个点,并相应地执行.你可以随意把空格放在你喜欢的文件名中(包括扩展名).

当你说“Windows也这么认为”的时候,资源管理器中的一些代码实际上只是解析出扩展,而只是使用与.NET不同的算法.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...