【问题标题】:powershell [System.IO.File]::WriteAllLines not working [duplicate]powershell [System.IO.File]::WriteAllLines 不工作 [重复]
【发布时间】:2021-10-22 19:16:20
【问题描述】:

这些 PowerShell 命令有什么问题。它不写文件“test.txt”

PS> $stuff = @("AAA`n", "BBB`n")
PS> [System.IO.File]::WriteAllLines(".\test.txt", $stuff)
PS> dir
# Nothing here....

我的计算机上是否有任何错误配置可能导致此问题?我是否需要以某种方式重新安装 .net?

【问题讨论】:

  • .NET 的工作目录通常与 PowerShell 的不同,因此您应该始终将 完整的文件系统本地 路径传递给 .NET 方法调用。假设它已经存在,使用Convert-Path 将相对路径转换为完整的文件系统原生路径。要指定要在 PowerShell 的当前位置创建的文件,请使用 "$PWD\file.txt" 之类的内容,但来自特定于 PS 的驱动器除外。有关详细信息,请参阅链接副本的 this answer

标签: powershell filepath working-directory


【解决方案1】:

尝试dir ~\test.txt - 或使用绝对路径c:\path\to\my\test.txt。最好看看Set-Content cmdlet。

仅供参考:您的计算机没有任何问题 - 您使用的是 dotnet 库,因此您需要更具体(基本上)。 Set-Content 是执行此操作的 powershell 方式(.\test.txt 将按您的预期工作)。

【讨论】:

    【解决方案2】:

    .Net 不使用与 PowerShell 相同的路径。解决方法是将相对路径解析为完整路径:

    PS C:\> $stuff = @("AA", "BB")
    PS C:\> $out_file = ".\out.txt"
    PS C:\> New-Item -Force -Path $out_file
    PS C:\> $out_full = $(Resolve-Path -Path $out_file)
    PS C:\>[System.IO.File]::WriteAllLines(` 
        ".\testing.txt", $out_full)
    

    更好的方法:

    function open_w {
        param([string]$path)
        write-host "path: $path"
        $pathfix =  $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($path)
        return [System.IO.StreamWriter]::new($pathfix)
    }
    

    【讨论】:

    • 你的参数错误..应该是[System.IO.File]::WriteAllLines($out_full, $stuff)。此外,您不需要先使用New-Item 创建该文件,因为WriteAllLines() “创建一个新文件,将指定的字符串数组写入文件,然后关闭该文件。”。最后,您也不需要 @() 来创建 $stuff 数组。只需在值之间使用逗号即可。
    • 值得称赞的是,您想提醒其他人注意这个经典陷阱(PowerShell 和 .NET 之间的当前目录不同),但示例代码存在问题。除了@Theo 已经说过的:$out_full = "$pwd\out.txt" 在大多数情况下都会这样做;完全稳健:"$((Get-Location -PSProvider FileSystem).ProviderPath)\out.txt"。如果您确实需要解析,请不要使用Resolve-Path:它不会将基于 PS-specific-drive-based 的路径解析为 file-system-native一,后者是 .NET API 所需要的;请改用Convert-Path=的右上方不需要$(...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2015-04-21
    • 2017-12-12
    • 2012-11-15
    • 2018-03-29
    • 2015-01-20
    相关资源
    最近更新 更多