2

.exe リソースに .zip フォルダーがあり、それを移動してフォルダーに抽出する必要があります。現在、System.IO.File.WriteAllByte を使用して .zip を移動し、解凍しています。リソースからフォルダに直接解凍する方法はありますか?

    Me.Cursor = Cursors.WaitCursor
    'Makes the program look like it's loading.

    Dim FileName As FileInfo
    Dim Dir_ExtractPath As String = Me.tb_Location.Text
    'This is where the FTB folders are located on the drive.

    If Not System.IO.Directory.Exists("C:\Temp") Then
        System.IO.Directory.CreateDirectory("C:\Temp")
    End If
    'Make sure there is a temp folder.

    Dim Dir_Temp As String = "C:\Temp\Unleashed.zip"
    'This is where the .zip file is moved to.

    Dim Dir_FTBTemp As String = Dir_ExtractPath & "\updatetemp"
    'This is where the .zip is extracted to.

    System.IO.File.WriteAllBytes(Dir_Temp, My.Resources.Unleashed)
    'This moves the .zip file from the resorces to the Temp file.

    Dim UnleashedZip As ZipEntry
    Using Zip As ZipFile = ZipFile.Read(Dir_Temp)
        For Each UnleashedZip In Zip
            UnleashedZip.Extract(Dir_FTBTemp, ExtractExistingFileAction.DoNotOverwrite)
        Next
    End Using
    'Extracts the .zip to the temp folder.
4

2 に答える 2

1

したがって、既に Ionic ライブラリを使用している場合は、zip ファイル リソースをストリームとして取り出し、そのストリームを Ionic にプラグインして解凍することができます。My.Resources.Unleashed のリソースがある場合、zip ファイルをストリームに入れるには 2 つのオプションがあります。リソースのバイトから新しいMemoryStreamをロードできます。

Using zipFileStream As MemoryStream = New MemoryStream(My.Resources.Unleashed)
    ...
End Using

または、リソースの名前の文字列表現を使用して、アセンブリから直接ストリームを取得できます。

Dim a As Assembly = Assembly.GetExecutingAssembly()
Using zipFileStream As Stream = a.GetManifestResourceStream("My.Resources.Unleashed")
    ...
End Using

ストリームを取得したら、すべてのファイルを現在の作業ディレクトリに抽出すると仮定すると、次のようになります。

Using zip As ZipFile = ZipFile.Read(zipFileStream)
    ForEach entry As ZipEntry In zip
        entry.Extract();
    Next
End Using
于 2013-09-06T08:11:00.137 に答える