2013-09-06 7 views
2

У меня есть .zip-папка в ресурсах .exe, и мне нужно ее переместить, а затем извлечь в папку. В настоящее время я перемещаю .zip в System.IO.File.WriteAllByte и разархивирую его. Есть ли вообще, чтобы распаковать прямо из ресурсов в папку?Извлечение из ваших ресурсов VB.net

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. 
+0

вы можете посмотреть [Assembly.GetManifestResourceStream ] (http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getmanifestresourcestream.aspx), чтобы загрузить ресурс непосредственно в поток, а затем использовать библиотеку распаковки, которая поддерживает распаковку из потока. –

ответ

1

Так что, если вы используете библиотеку Ионные уже, вы могли бы вытащить ресурс почтовый файл как поток, и подключить этот поток в ионическом, чтобы разархивировать его. Учитывая ресурс My.Resources.Unleashed, у вас есть два варианта получения zip-файла в поток. Вы можете загрузить новую 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 
+0

Это не работает с моей программой, потому что я звоню из my.resources.filename, и это дает мне ошибку об «1-мерном массиве байтов», не может быть преобразовано в «String». – Spartin503

+0

@ Spartin503 Какая строка дает вам эту ошибку? – Adrian

+0

строка 2, первая инструкция 'using'. – Spartin503

Смежные вопросы