System.IO.Compression.ZipFileExtensions - CreateEntryFromFile дает "потому что он используется другим процессом" на zip - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь сжать 1 файл в новый архив. Приведенный ниже код работает .... большую часть времени. Однако время от времени (проблемы с сетью?) Я менял код (см. Ниже), чтобы создать уникальное имя, но я все еще иногда получаю эту ошибку.

Есть ли способ обойти эту проблему? Я на PowerShell 3, так что сжатый архив не вариант, хотя я, вероятно, могу установить pscx.

Exception calling "Open" with "2" argument(s): "The process cannot access the file '\\path\share$\folder\filename_20200221_14__20200224_102143.zip' because it is being used by another process."
At line:3 char:5
+     [System.IO.Compression.ZipArchive]$ZipFile = [System.IO.Compression.ZipFile] ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : IOException

Вот код, который я использую.

Я выполнил «foreach ($ file in $ files_to_process)», но смог продублировать ошибку, используя foreach {} для установки переменных, а затем запустил приведенный ниже код. Последующие прогоны работают, естественно.

$timestamp = (get-date).ToString("yyyyMMdd_HHmmss")

# Now create the zip file and remove the old one 
[string]$zipFN = "$OnPremDirectoryDone$($file.basename)__$($timestamp).zip"
[string]$fileToZip = "$OnPremDirectory$($file.name)"
[System.IO.Compression.ZipArchive]$ZipFile = [System.IO.Compression.ZipFile]::Open($zipFN, ([System.IO.Compression.ZipArchiveMode]::Update))
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($ZipFile, $fileToZip, (Split-Path $fileToZip -Leaf))
$ZipFile.Dispose()
remove-item "$fileToZip"
...