Вопрос по – Найти и заменить в файлах не удается

22

Я пытаюсь найти и заменить в файле, используя следующий подход.

<code>Function Find-Replace ($FileFullpath, $FindString, $ReplacementString) {

   Get-Content $FileFullpath | 
   Foreach-Object {$_ -replace $FindString, $ReplacementString } |  
   Set-Content $FileFullpath

}

Find-Replace "c:\program files (x86)\MyProj\web.config" $OldServiceName $NewServiceName
</code>

Но я всегда получаю ошибку.

Set-Content : The process cannot access the file 'c:\program files (x86)\MyProj\web.config' because it is being used by another process.

Файл не открывается нигде. Я думаю, что Get-контент еще не выпустить файл.

Почему так происходит ? Как найти и заменить в том же файле без проблем?

Ваш Ответ

1   ответ
46

Вы не можете читать и писать в один и тот же файл, пока он открыт, Get-Content открывает файл для чтения и в то же время Set-Content пытается записывать в него. Поместите вызов Get-Conetnt в скобки, он откроет файл, прочитает его содержимое и закроет его.

(Get-Content $FileFullpath) | ...
Спасибо @Samselvaprabu рад помочь. Вы также можете найти это в справке:technet.microsoft.com/en-us/library/dd347736.aspxПосмотрите на третий пример.
Я искал результат в течение получаса и разочарован неудачей. Я поднял этот вопрос и пошел на кофе. Теперь ответ здесь. То же самое произошло несколько месяцев назад. Поразительная вещь снова Леви :) Samselvaprabu

Похожие вопросы