我正在处理一些涉及将文件保存到用户定义文件的代码.如果用户传入没有扩展名的文件名,代码将根据文件类型(内部存储)自动检测扩展名.
但是,我很难确定传递给代码的文件名是否有扩展名.我使用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,但是其中链接的文档仅指定不推荐使用空格/期限结束扩展 – 他们对扩展名中的空格一无所知.