我正在尝试使用technique outlined in another SO question使用PowerShell将文件格式转换为UTF-8。
我使用以下声明:
[IO.File]::WriteAllLines((Get-Item -Path ".\" -Verbose).FullName,"Test.txt")
第一个参数是文件路径(C:\ users \ rsax \ documents \ Test),第二个参数是文件名。
但是,该命令无效,并返回以下错误:
Exception calling "WriteAllLines" with "2" argument(s): "Access to the path 'C:\users\rsax\documents\Test' is denied."
At line:1 char:25
+ [IO.File]::WriteAllLines <<<< ((Get-Item -Path ".\" -Verbose).FullName,"Test.txt")
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
我可以在访问该文件的目录中运行其他cmdlet,例如 as:
Get-Content Test.txt | Out-File TestOut.txt
我无法在MSDN MethodInvocationException page找到答案。
我做错了什么?
答案 0 :(得分:4)
我不确定你是否理解你正在使用的超载。第一个参数应该是文件路径,而第二个参数是内容(不是文件名)。 (Get-Item -Path ".\" -Verbose).FullName
将是文件夹的路径,而不是文件。此外,不需要-Verbose
开关。
PS> [IO.File]::WriteAllLines.OverloadDefinitions
static void WriteAllLines(string path, string[] contents)
样品:
$content = Get-Content .\Test.txt
$outfile = Join-Path (Get-Item -Path ".\Test.txt").DirectoryName "TestOut.txt"
[IO.File]::WriteAllLines($outfile, $content)
答案 1 :(得分:2)
WriteAllLines
获取文件的完整路径,然后是要写入的文本行。不要分开文件部分。另请注意,您根本没有告诉它要写什么。
$content = 'a','b','c'
$path = (Get-Item -Path ".\" -Verbose).FullName | Join-Path -ChildPath 'Test.txt'
[IO.File]::WriteAllLines($path,$content)