这是我尝试过的(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文件系统或将其上传到网站,将不会保留。