2015/11/16

SevenZipSharpで、書庫ファイル(圧縮ファイル)の情報を取得する

次期VB De FilMtnで、書庫ファイル(圧縮ファイル)を扱うために、何か無いかと物色中。
統合アーカイバプロジェクトは、x64に対応していないものがほとんどなので...。
CodePlexで、比較的RATINGが高いSevenZipSharpを検討してみます。

Imports SevenZip

Public Class Form1

    Private WithEvents extractor As SevenZipExtractor

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) 
                                                           Handles Button1.Click

        Dim archiveFile As String = "C:\SevenZipSharp\files\SevenZipSharp.7z"
        Dim libraryPath As String = System.IO.
                Path.Combine(System.IO.Path.GetDirectoryName(
                        Application.ExecutablePath), 
                        "SevenZipSharp\7z.dll")
        SevenZipExtractor.SetLibraryPath(libraryPath)
        extractor = New SevenZipExtractor(archiveFile)
        Try

            Debug.Print("SevenZipExtractor:FileName:{0}", extractor.FileName)
            Debug.Print("SevenZipExtractor:FilesCount:{0}", extractor.FilesCount)
            Debug.Print("SevenZipExtractor:IsSolid:{0}", extractor.IsSolid)
            Debug.Print("SevenZipExtractor:PackedSize:{0}", extractor.PackedSize)
            Debug.Print("SevenZipExtractor:Password:{0}", extractor.Password)
            Debug.Print("SevenZipExtractor:UnpackedSize:{0}", extractor.UnpackedSize)
            Debug.Print("SevenZipExtractor:Format:{0}", extractor.Format)

            For Each aprop As ArchiveProperty In extractor.ArchiveProperties
                Debug.Print("ArchiveProperty:{0}:{1}", aprop.Name, aprop.Value)
            Next

            For Each info As ArchiveFileInfo In extractor.ArchiveFileData()

                Debug.Print("ArchiveFileInfo:FileName:{0}", info.FileName)
                Debug.Print("ArchiveFileInfo:Index:{0}", info.Index)
                Debug.Print("ArchiveFileInfo:IsDirectory:{0}", info.IsDirectory)
                Debug.Print("ArchiveFileInfo:Size:{0}", info.Size)
                Debug.Print("ArchiveFileInfo:Attributes:{0}", info.Attributes)
                Debug.Print("ArchiveFileInfo:Comment:{0}", info.Comment)
                Debug.Print("ArchiveFileInfo:Crc:{0}", info.Crc)
                Debug.Print("ArchiveFileInfo:CreationTime:{0}", info.CreationTime)
                Debug.Print("ArchiveFileInfo:LastWriteTime:{0}", info.LastWriteTime)
                Debug.Print("ArchiveFileInfo:LastAccessTime:{0}", info.LastAccessTime)

            Next

        Catch ex As Exception

        Finally

            extractor.Dispose()

        End Try

    End Sub

End Class

こんな感じ。
SetLibraryPathメソッドで、7zファイルを指定するのがミソっぽい。
残念なことに、圧縮後のサイズを取得するプロパティが実装されていない。
ソースを追いかけると、ただ実装されていないだけ。LHMTNな表示をするためには、圧縮後のサイズがないと、Rateも表示できないし。
不採用だな。

0 件のコメント: