Powershell - WriteAllLines方法 - '访问被拒绝'

时间:2016-02-19 23:46:04

标签: .net powershell utf-8

我正在尝试使用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
  • 我是以管理员身份从PowerShell运行命令。
  • 我已验证该文件位于文件夹中。
  • 我可以在访问该文件的目录中运行其他cmdlet,例如 as:

    Get-Content Test.txt | Out-File TestOut.txt

  • 我无法在MSDN MethodInvocationException page找到答案。

我做错了什么?

2 个答案:

答案 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)