Файл блокировки PowerShell - PullRequest
       2

Файл блокировки PowerShell

6 голосов
/ 17 июня 2010

Я пытаюсь сделать что-то очень простое в PowerShell.

  1. Чтение содержимого файла
  2. Манипулирование некоторой строкой
  3. Сохранение измененноговернитесь к файлу

    function Replace {
      $file = Get-Content C:\Path\File.cs
      $file | foreach {$_ -replace "document.getElementById", "$"} |out-file -filepath C:\Path\File.cs
    }
    

Я также пробовал Set-Content.

Я всегда получаю несанкционированное исключение.Я вижу, что $file содержит содержимое файла, при записи файла возникает ошибка.

Как я могу это исправить?

Ответы [ 2 ]

4 голосов
/ 17 июня 2010

Вероятно, это вызвано командлетом Get-Content, который получает блокировку для чтения, и Out-File, который пытается получить блокировку для записи.Подобный вопрос здесь: Powershell: как вы читаете и пишете ввод-вывод в пределах одного конвейера?

Таким образом, решение будет таким:буферизировать содержимое файла, чтобы файл мог быть закрыт (Get-Content для чтения), и после этого буфер должен быть сброшен в файл (Set-Content, во время которого потребуется блокировка записи).

0 голосов
/ 28 июня 2019

Принятый ответ сработал для меня, если у меня была одна файловая операция, но когда я выполнял несколько операций Set-Content или Add-Content с одним файлом, я все равно получал ошибку «используется другим процессом».

В конце концов мне пришлось записать временный файл, а затем скопировать временный файл в исходный файл:

(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...