PowerShell锁定文件

PowerShell锁定文件,powershell,Powershell,我正在尝试在PowerShell中做一些非常简单的事情 读取文件的内容 操纵一些字符串 将修改后的测试保存回文件 function Replace { $file = Get-Content C:\Path\File.cs $file | foreach {$_ -replace "document.getElementById", "$"} |out-file -filepath C:\Path\File.cs } 我也尝试过设置内容 我总是得到未经授权的例外。我可以看到$file

我正在尝试在PowerShell中做一些非常简单的事情

  • 读取文件的内容
  • 操纵一些字符串
  • 将修改后的测试保存回文件

    function Replace {
      $file = Get-Content C:\Path\File.cs
      $file | foreach {$_ -replace "document.getElementById", "$"} |out-file -filepath C:\Path\File.cs
    }
    
  • 我也尝试过设置内容

    我总是得到未经授权的例外。我可以看到
    $file
    包含文件内容,写入文件时出错


    如何修复此问题?

    这可能是由获取读取锁定的
    Get Content
    cmdlet和尝试获取写入锁定的
    Out File
    造成的。类似的问题如下:

    因此,解决办法是:

    ${C:\Path\File.cs} = ${C:\Path\File.cs} | foreach {$_ -replace "document.getElementById", '$'}
    ${C:\Path\File.cs} = Get-Content C:\Path\File.cs | foreach {$_ -replace  "document.getElementById", '$'}
    
    $content = Get-Content C:\Path\File.cs | foreach {$_ -replace "document.getElementById", '$'}
    $content | Set-Content C:\Path\File.cs
    

    基本上,您需要缓冲文件内容,以便关闭文件(
    获取内容
    进行读取),然后将缓冲区刷新到文件(
    设置内容
    ,在此期间需要写锁定)。

    如果我有一个文件操作,则接受的答案对我有效,但是,当我在同一个文件上执行多个设置内容或添加内容操作时,仍然出现“正在被另一个进程使用”错误

    最后,我不得不写入临时文件,然后将临时文件复制到原始文件:

    (Get-Content C:\Path\File.cs) | foreach {$_ -replace "document.getElementById", '$'} | Set-Content C:\Path\File.cs.temp
    Copy-Item C:\Path\File.cs.temp C:\Path\File.cs
    

    个人经历:我的一次手术中出现了“文件锁定综合症”。我发现它是由文件上的新对象分配引起的。我意识到我没有对该对象发出“Dispose()”调用。我重写了有问题的代码,以便在方便的时候尽快处理“新对象”,解决了“锁定文件”综合症。
    我的学习活动=始终处理每个新对象

    是所有文件都失败了,还是只有那个文件失败了,还是在那个路径中失败了。谢谢现在我问这个问题觉得很愚蠢:)但是谢谢。我确实读过这篇文章,但因为我在一条语句中对所有内容进行了管道传输,所以它给了我错误,因为锁没有释放。酷!!我不了解解决方案-我通过
    [xml]$file=Get Content$filename>拥有一个xml文件,当我在读取该文件后尝试删除该文件时,会出现锁定错误。
    XmlDocument
    上没有dispose方法,并且将
    $file
    置零无效,因此我不确定如何继续。变量可能应该是“xml”
    [xml]$xml=Get Content$filename
    。所以很明显,它不是文件,而是表示xml的对象
    删除项目$filename
    删除文件。