Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find and replace in files fails

I am trying to do find and replace in a file using following approach.

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

But i am always getting error.

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

The file is not opened any where. I think Get-content is yet to release the file.

Why it happens ? How to do find and replace in the same file without issue?

like image 348
Samselvaprabu Avatar asked May 07 '12 10:05

Samselvaprabu


1 Answers

You can't read and write to the same file while it's open, Get-Content opens the file for reading and in the same time Set-Content tries to write to it. Put the Get-Conetnt call in parentheses, it will open the file, read it's content and close it.

(Get-Content $FileFullpath) | ...
like image 137
Shay Levy Avatar answered Nov 01 '22 04:11

Shay Levy