Сжатие пустых папок как папок, а не файлов - PullRequest
1 голос
/ 29 марта 2019

Я использую System.IO.Compression.FileSystem для сжатия папки с подпапками в скрипте powershell.Некоторые из папок пусты, и вместо пустых папок создаются пустые файлы.Я думал, что это ошибка, но они указывают это в своей документации :

Структура каталогов из файловой системы сохраняется в архиве.Если каталог пуст, создается пустой архив.Используйте этот метод перегрузки, чтобы указать уровень сжатия и включить ли базовый каталог в архив.

Знаете ли вы, как этого избежать, я хочу пустые папки как папки ... Это кажется смешным...

РЕДАКТИРОВАТЬ:

$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($Source, $Target, $compressionLevel, $true)

1 Ответ

0 голосов
/ 29 марта 2019

Для меня это прекрасно работает, если я добавлю ссылку на System.IO.Compression.FileSystem.dll:

Add-Type -Path 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.IO.Compression.FileSystem\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.FileSystem.dll'

# compress using just two parameters. 
# This will omit the source folder and gives you no option to set the CompressionLevel
[System.IO.Compression.ZipFile]::CreateFromDirectory("D:\Testzip", "D:\result.zip")

Если вы хотите, чтобы исходная папка была также включена, используйте функцию с 4 параметрами:

[System.IO.Compression.ZipFile]::CreateFromDirectory("D:\Testzip", "D:\result.zip", "Fastest", $true)

См. CompressionLevel Enum

Для тестирования я использовал структуру папок, в которой только подпапка D:\Testzip\folder1\folder1-1 пуста:

D:\TESTZIP
|   the only file in the root directory.txt
|
\---folder1
    +---folder1-1
    \---folder1-2
            just a single file here.txt

Файл result.zip впоследствии прекрасно включал пустую папку ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...