Прошу помощи с функцие GetManifestResourceStream
Описание:
Моя программа открывает .NET PE файл для извлечения видео ресурса, добавленого мною ранее
Все бы хорошо, вот только извлекаемы файл испорчен, хотя проверял несколько раз этот ресурс сторонним ПО (ResTuner итп.) и внутри EXE он корректен
Код функции записи в файл:
- Код: Выделить всё
Public Function WriteResource(ByVal filename As String, ByVal bytes As Byte()) As Boolean
Try
Dim handle As IntPtr = BeginUpdateResource(filename, False)
Dim file1 As Byte() = bytes
Dim fileptr As IntPtr = ToPtr(file1)
Dim res As Boolean = UpdateResource(handle, "RT_RCDATA", "VIDEO", 0, fileptr, Convert.ToUInt32(file1.Length))
EndUpdateResource(handle, False)
Catch ex As Exception
Return False
End Try
Return True
End Function
Код функции извлечения из файла:
- Код: Выделить всё
Public Sub SaveToDisk(ByVal resourceName As String, ByVal fileName As String)
Dim assy As [Assembly] = [Assembly].GetExecutingAssembly()
For Each resource As String In assy.GetManifestResourceNames()
If resource.ToLower().IndexOf(resourceName.ToLower) <> -1 Then
Using resourceStream As System.IO.Stream = assy.GetManifestResourceStream(resource)
If resourceStream IsNot Nothing Then
Using reader As New BinaryReader(resourceStream)
Dim buffer() As Byte = reader.ReadBytes(CInt(resourceStream.Length))
Using outputStream As New FileStream(fileName, FileMode.Create)
Using writer As New BinaryWriter(outputStream)
writer.Write(buffer)
End Using
End Using
End Using
End If
End Using
Exit For
End If
Next resource
End Sub
Использование кода записи в файл:
- Код: Выделить всё
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim buffer As Byte() = My.Computer.FileSystem.ReadAllBytes("с:\video.avi")
WriteResource("c:\test_app.exe", buffer)
End Sub
Использование кода извлечения из файла:
- Код: Выделить всё
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SaveToDisk("VIDEO", "c:\video2.avi")
End Sub
В оригинале, видео файл весит 1Мб, в новом ресурсе он имеет то же значение, но после извлечения он уже больше 10Мб и испорчен
Подскажите пожалуйсто, как изменить функцию извлечения из файла, чтобы извлекаемый файл не портился