首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SevenZipSharp压缩多卷?

用SevenZipSharp压缩多卷?
EN

Stack Overflow用户
提问于 2013-04-15 13:34:00
回答 1查看 5.7K关注 0票数 6

我想使用SevenZipsharp压缩一个卷的文件,例如,将一个100 mb的文件压缩成10个文件,每个文件10 mb。我们可以使用7zip.exe -volume参数来做同样的事情,所以.

例如,当我使用7 7Zip压缩多卷时,我得到了以下文件结构:

代码语言:javascript
复制
File.7z.001
File.7z.002
File.7z.003
etc...

这些文件不是独立的,不是数量相同的7zip文件,是一个压缩文件在不同的卷,我的意思是提取整个内容,我们需要的第一个文件"File.7z.001“

我想使用SevenZipSharp做同样的事情(如果可能的话)。

我已经在vb.net中编写了这个片段(但是不管答案是在C#代码中),我需要实现多卷选项,我需要帮助:

代码语言:javascript
复制
   Imports SevenZip

   Dim dll As String = "7z.dll"

   Private Function SevenZipSharp_Compress(ByVal Input_DirOrFile As String, _
                                      Optional ByVal OutputFileName As String = Nothing, _
                                      Optional ByVal Format As OutArchiveFormat = OutArchiveFormat.SevenZip, _
                                      Optional ByVal CompressionMode As CompressionMode = CompressionMode.Create, _
                                      Optional ByVal CompressionMethod As CompressionMethod = CompressionMethod.Lzma, _
                                      Optional ByVal CompressionLevel As CompressionLevel = CompressionLevel.Normal, _
                                      Optional ByVal Password As String = Nothing) As Boolean
       Try
           ' Set library path
           SevenZipExtractor.SetLibraryPath(dll)


       ' Create compressor and specify the file or folder to compress
       Dim Compressor As SevenZipCompressor = New SevenZipCompressor()

       ' Set compression parameters
       Compressor.CompressionLevel = CompressionLevel ' Archiving compression level.
       Compressor.CompressionMethod = CompressionMethod ' Append files to compressed file or overwrite the compressed file.
       Compressor.ArchiveFormat = Format ' Compression file format
       Compressor.CompressionMode = CompressionMode ' Compression mode
       Compressor.DirectoryStructure = True ' Preserve the directory structure.
       Compressor.IncludeEmptyDirectories = True ' Include empty directories to archives.
       Compressor.ScanOnlyWritable = False ' Compress files only open for writing.
       Compressor.EncryptHeaders = False ' Encrypt 7-Zip archive headers
       Compressor.TempFolderPath = System.IO.Path.GetTempPath() ' Temporary folder path
       Compressor.FastCompression = False ' Compress as fast as possible, without calling events.
       Compressor.PreserveDirectoryRoot = True ' Preserve the directory root for CompressDirectory.
       Compressor.ZipEncryptionMethod = ZipEncryptionMethod.ZipCrypto ' Encryption method for zip archives.
       Compressor.DefaultItemName = "File.7z" ' Item name used when an item to be compressed has no name, for example, when you compress a MemoryStream instance

       ' Get File extension
       Dim CompressedFileExtension As String = Nothing
       Select Case Compressor.ArchiveFormat
           Case OutArchiveFormat.SevenZip : CompressedFileExtension = ".7z"
           Case OutArchiveFormat.BZip2 : CompressedFileExtension = ".bz"
           Case OutArchiveFormat.GZip : CompressedFileExtension = ".gzip"
           Case OutArchiveFormat.Tar : CompressedFileExtension = ".tar"
           Case OutArchiveFormat.XZ : CompressedFileExtension = ".xz"
           Case OutArchiveFormat.Zip : CompressedFileExtension = ".zip"
       End Select

       ' Add Progress Handler
       'AddHandler Compressor.Compressing, AddressOf SevenZipSharp_Compress_Progress

       ' Removes the end slash ("\") if given for a directory
       If Input_DirOrFile.EndsWith("\") Then Input_DirOrFile = Input_DirOrFile.Substring(0, Input_DirOrFile.Length - 1)

       ' Generate the OutputFileName if any is given.
       If OutputFileName Is Nothing Then _
           OutputFileName = (My.Computer.FileSystem.GetFileInfo(Input_DirOrFile).DirectoryName & "\" & (Input_DirOrFile.Split("\").Last) & CompressedFileExtension).Replace("\\", "\")

       ' Check if given argument is Dir or File ...then start the compression
       If IO.Directory.Exists(Input_DirOrFile) Then ' Is a Dir
           If Not Password Is Nothing Then
               Compressor.CompressDirectory(Input_DirOrFile, OutputFileName, True, Password)
           Else
               Compressor.CompressDirectory(Input_DirOrFile, OutputFileName, True)
           End If
       ElseIf IO.File.Exists(Input_DirOrFile) Then ' Is a File
           If Not Password Is Nothing Then
               Compressor.CompressFilesEncrypted(OutputFileName, Password, Input_DirOrFile)
           Else
               Compressor.CompressFiles(OutputFileName, Input_DirOrFile)
           End If
       End If

   Catch ex As Exception
       'Return False ' File not compressed
       Throw New Exception(ex.Message)
   End Try

   Return True ' File compressed


   End Function

使用代码片段:

代码语言:javascript
复制
   SevenZipSharp_Compress("C:\File or folder", _
                           "Optional: Output dir", _
                           OutArchiveFormat.SevenZip, _
                           CompressionMode.Create, _
                           CompressionMethod.Lzma, _
                           CompressionLevel.Ultra, _
                           "Optional: Password")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-28 01:45:38

Compressor对象上,将VolumeSize设置为输出文件的所需大小(以字节为单位)。使用下面的示例代码,在源目录中包含大约72 mp3的mp3文件,压缩器创建了8个名为zipped.7z.001、zipped.7z.002等的输出文件。

查看SevenZipExtractor类的当前源代码,看起来只有当您使用OutArchiveFormat.SevenZip作为您的ArchiveFormat时,多卷压缩才可用。

代码语言:javascript
复制
string dll = @"C:\Users\WarrenG\Desktop\7z.dll";
string source = @"C:\Users\WarrenG\Desktop\source";
string output = @"C:\Users\WarrenG\Desktop\output\zipped.7z";

SevenZipExtractor.SetLibraryPath(dll);
SevenZipCompressor compressor = new SevenZipCompressor();
compressor.ArchiveFormat = OutArchiveFormat.SevenZip;
compressor.CompressionMode = CompressionMode.Create;
compressor.TempFolderPath = System.IO.Path.GetTempPath();
compressor.VolumeSize = 10000000;   // output file size in bytes
compressor.CompressDirectory(source, output);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16016540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档