SevenZipSharp добавляет зашифрованный архив

Я использую Seven Zip Sharp, и у меня возникают проблемы с попыткой добавить файл в зашифрованный архив. Добавление к незашифрованному архиву (с соответствующими методами), кажется, работает, но зашифрованный архив выдает следующую ошибку

Invalid archive: open/read error! Is it encrypted and a wrong password was provided?
If your archive is an exotic one, it is possible that SevenZipSharp has no signature 
for its format and thus decided it is TAR by mistake. Message: Can not update the archive:
Open() failed.

Мне было интересно, выполнил ли кто-нибудь еще это успешно. Вот пример кода, который я использую

void AppendEncFilefile(Stream docstream, string addfilename, string archivename)
{          

    SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
    compressor.CompressionMode = SevenZip.CompressionMode.Append;
    compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
    compressor.ArchiveFormat = SevenZip.OutArchiveFormat.SevenZip;
    compressor.EncryptHeaders = true;

    //this fails : trying to pass archive and file to add
    compressor.CompressFilesEncrypted(datafile, "password", addfilename);
    //this fails : trying to pass stream containg data to be written, and filename to save as
    compressor.CompressStreamDictionary(
          new Dictionary<string, System.IO.Stream>() 
              { 
                 { addfilename, xmldocstream } 
              }
          , archivename, "password");    
}

Спасибо


person Dawood Moazzem    schedule 04.07.2012    source источник


Ответы (2)


У меня такая же проблема. Я «решил» это, сжав без шифрования, но добавив файл +1 с шифрованием. Файловый менеджер 7z запросил пароль, а 7z содержал все файлы - мне хватило. Конечно, файловый менеджер указал, что остальные файлы не зашифрованы.

Все еще ищете ХОРОШИЙ способ решить эту проблему, но в качестве обходного пути он помогает на какое-то время.

person Zéiksz    schedule 19.04.2013

Была такая же проблема, попробуйте:

 compressor.ArchiveFormat = SevenZip.OutArchiveFormat.Zip;

вместо:

 compressor.ArchiveFormat = SevenZip.OutArchiveFormat.SevenZip;
person Teodor Głaz    schedule 01.10.2015
comment
Ценю ответ, однако я специально искал 7zip из-за лучшего сжатия. - person Dawood Moazzem; 25.01.2016