路径中带有冒号的 CreateTextFile,不会返回任何错误。为什么?

CreateTextFile with a Colon in the path , no error is returned. Why?

这是我试过的(C:\temp确实存在):

$fso = New-Object -ComObject Scripting.FileSystemObject 
$ts = $fso.CreateTextFile("c:\temp:AAAAA.txt")      
$ts.Close() 

没有返回错误。该文件是在某处创建的(但不在 c:\temp 中...如果我在里面放了一些东西,我以后可以读取它) 但是我找不到它。

谁能解释一下为什么这段代码没有产生错误以及文件去了哪里?

没有报错的原因可能是调用成功了!

当您调用 CreateTextFile 并传递文件路径 C:\temp:AAAAA.txt 时,您实际上是在要求创建一个文件 C:\temp,其中包含备用数据流(ADS ) 名为 AAAAA.txt.

你可以用 Get-Item 自己看看:

PS C:\> Get-Item C:\temp -Stream AAAAA.txt

PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\temp:AAAAA.txt
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName   : temp:AAAAA.txt
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\temp
Stream        : AAAAA.txt
Length        : 0

您还可以读取和写入备用数据流(需要 PowerShell 版本 5 或更高版本):

PS C:\> "Hello there!" |Set-Content C:\temp -Stream AAAAA.txt
PS C:\> Get-Content C:\temp -Stream AAAAA.txt
Hello there!

请注意 these data streams 是 NTFS 固有的,如果您将文件复制到非 NTFS 文件系统或将它们上传到网站,例如,它不会持续存在。