Windows下含点冒号的路径名生成幽灵文件的异常问题
问题解释:Windows下
x.:x文件名的异常行为 这是NTFS备用数据流(Alternate Data Streams, ADS)与Windows API路径解析规则共同作用的结果,具体拆解如下:
冒号的特殊作用:备用数据流
NTFS文件系统允许单个文件拥有多个数据流,格式为文件名:数据流名。默认访问的是主数据流(无命名),附加数据流需要通过这种格式指定。你执行echo hello >x.:x时,实际是创建了名为x.的文件,并将内容写入了它的备用数据流x,而主数据流是空的——这就是dir命令显示x.大小为0的原因。Cmd的路径解析限制
dir命令默认不显示备用数据流,因此只能看到主文件条目x.。- 执行
type x.时,Windows API会自动忽略文件名末尾的点,将路径解析为x,但实际存在的文件是x.,因此提示“找不到指定文件”。 - 执行
type x.:x时,Cmd本身不支持直接访问备用数据流的语法,因此抛出“文件名语法错误”的提示。
Python的路径处理逻辑
Python的pathlib(以及底层调用的Windows API)能够正确识别NTFS备用数据流的路径格式,因此Path('x.:x')可以精准定位到x.文件的x数据流,从而读取到写入的内容。为什么
x:x会被拒绝?
当路径为x:x时,Windows API会将x:识别为驱动器号格式,但x并非系统中存在的驱动器,因此直接拒绝该路径。而x.:x中的x.被明确解析为文件名,后续的:x被解析为数据流名,不属于驱动器号格式,因此绕过了这一检查。
内容的提问来源于stack exchange,提问作者roeen30
相关产品推荐
相关产品推荐

