[ Python ] 在 windows 系统下以 `"w"` 操作 `open` 非法(invalid)文件名的不同现象是为什么?

2020-08-11 09:30:33 +08:00
 oahebky
fp = open("D:\\foo:bar.txt", "w")
fp.close()

上面 👆 这样的行为,执行不会报错,windows 系统中创建了一个 foo 文件名的文件


fp = open("D:\\foo:bar:egg.txt", "w")
fp.close()

👆 这样的行为,执行就会报错,错误为:

OSError: [Errno 22] Invalid argument: 'D:\\foo:bar:egg.txt'


含有 ":" 字符的文件名在 windows 系统下是非法的( Invalid ),那么第一个 foo:bar.txt 也应该直接报错呀。

这是为什么???

1633 次点击
所在节点    Python
2 条回复
lonewolfakela
2020-08-11 09:35:58 +08:00
在文件名后面跟一个冒号是有特殊含义的,表示这个路径指向该文件的一个 ntfs alternate data streams (可以去搜搜这个名词)。
具体到这里,你的第一个例子其实是创建了一个名字叫 foo 的文件,并为这个文件创建了一个名字叫 bar.txt 的 alternate data stream,并且之后如果你写入了内容的话,写入的内容都是会存到这个 alternate data stream 里去的。
no1xsyzy
2020-08-11 09:50:17 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697253

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX