PowerShell锁定文件
我正在尝试在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
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
删除文件。