众所周知,Windows中的文件名不能包含冒号。 但是,我遇到了一个问题,可以使用以下示例代码重现:
import os
os.chdir('./temp')
names = ['a', 'b', 'word1: word2', 'c: file', 'd: file']
for name in names:
with open(name, 'w') as f:
f.write('foo')
此脚本在./temp
目录中创建三个文件:a
,b
(带有'foo')和word1
(空)。它还在file
中创建了一个名为D:\
的文件,该文件是可移动存储。它不会在C:\
中创建任何内容,这需要管理员权限才能写入;但是,它确实在当前工作目录中创建了一个文件。
我不明白三件事:
word1
文件为空? 答案 0 :(得分:9)
Windows NTFS支持文件" stream"。您基本上将数据附加到文件之外的文件中,并且无法正常查看。当您创建文件" word1:word2"时,隐藏的流" word2"附在" word1"。如果将文件word1复制到另一台NTFS机器,则word2数据将随身携带
转到此处http://technet.microsoft.com/en-us/sysinternals/bb897440.aspx并下载流程序。运行它会显示word2是附加到word1的流
此页面还讨论了流: http://www.forensicfocus.com/dissecting-ntfs-hidden-streams
要真正证明这一点,您可以使用记事本,但需要使用.txt扩展名:
file=open('word1.txt:word2.txt','w')
file.write('Testing streams')
file.close()
现在,使用cmd程序,将目录更改为您创建文件的位置。输入以下内容:
c:\tmp> notepad word1.txt
您将看到一个空文件。现在,试试这个:
c:\tmp> notepad word1.txt:word2.txt
您应该看到文字Testing streams
。